2016-05-19 26 views
0

オブジェクト型とそれを変換する必要のあるデータ型の型を受け入れるJavaメソッドを作成しようとしています。Javaの汎用パラメータ型と戻り型

たとえば、必要に応じて1の値をIntまたはDoubleとして返すことができる必要がある場合。クラスを使用してデータ型をパラメータとして渡しています。

質問: 入力パラメータに基づいて戻り値の型を受け入れる方法を一般的にすることはできますか?

以下のコードは単なる例であり、構文的に正しくなく、私の質問を説明するために提供されるかもしれません。

public class JavaTest { 

    public static void main(String[] args) { 
     getValue(1,int.class); 
     getValue(1,double.class); 
     getValue("adf",String.class); 
    } 

    public static <E> void getValue(Object obj,Class<?> type) { 
     if (type == String.class) { 
      // return string value 
     }else if (type == int.class) { 
      //return Integer.parseInt(obj); 
     }else if (type == double.class) { 
      //return Double.parseDouble(obj); 
     } 
    } 
} 
+0

が置き換え '

ですから、このような何かを書くことができ、あなたの質問にこれを適用しますか? '' E 'で? – biziclop

+0

私はそれを試しましたが、私はreturn文を動作させることができませんでした。 – Purus

+0

なぜあなたもこれをやろうとしていますか? –

答えて

3

どのようにして、入力パラメータに基づいて、戻り値の型を受け入れる方法は、一般的なことができますか?

typeパラメータは、メソッドの戻り値の型を指定するために使用することができ、あなたは、その引数の型パラメータによってClass引数でそれを関連付けることができます:あなたはまた、Class.cast()を使用する必要があります

public static <E> E getValue(Object obj, Class<E> type) { 

そのメソッドが正しい型を返すことをコンパイラに要求する。 (安全上の警告を入力するあなたは、通常のキャストを使用することができますが、それは対象となります。)例:

// ... 
    } else if (type == Integer.class) { 
     return type.cast(Integer.valueOf(obj.toString())); 
    } 

も注意してくださいあなたのコードはあなたが示唆して、プリミティブ型に直接ではないこのよう効果変換できるように、そのやろうとしている。ラッパークラスに変換する必要があります。つまり、int.classdouble.classなどを使用することはできません。代わりにInteger.class,Double.classなどを使用する必要があります。

-1

Javaメソッドは1つの結果しか返すことができないので、少しの工夫が必要です。ご存じの通り、Objectを返すことができます。

ここに記載されているように:Return different type of data from a method in java? あなたは1つのクラスを、異なるタイプの2つのプライベートな値で書き込むことができます。

public class ReturningValues { 
public final double y; 
public final int x; 

public ReturningValues(double y, int x) { 
    this.y = y; 
    this.x = x; 
} 
} 

そして、あなたのメソッドの戻り値として、このクラスを使用します:

public static ReturnValues myMethod(){ 
    ReturningValues rv = new ReturningValues(null,1); 
    return rv; 
} 
+0

あなたはNPEを好きですね。プリミティブ型のパラメータに 'null 'を渡すことはできません。 –

+0

あなたは絶対に正しいです。私の日ではありませんでした。 – Otterbein

-1
public static void main(String[] args) { 
     int i= (int) getValue(10,int.class); 
     System.out.println("int value -->"+i); 
     Double d = (Double) getValue(25.023,double.class); 
     System.out.println("double d-->"+d); 

     String s=(String) getValue("adf",String.class); 
     System.out.println("String s-->"+s); 
    } 

    public static <T> Object getValue(Object obj,Class<?> type) { 
     return obj; 

    } 
+0

同じオブジェクトを返す場合は、なぜif文が必要でしょうか? – Purus

+0

if文はif文が貼り付けられているのでif文は必要ありません。 – kalsrin

+0

public static void main(String [] args){ int i =(int)getValue(10、int.class); System.out。println( "int value - >" + i); Double d =(Double)getValue(25.023、double.class); System.out.println( "double d - >" + d); 文字列s =(String)getValue( "adf"、String.class); System.out.println( "String s - >" + s); } public static Object getValue(Object obj、Class タイプ){ return obj; } – kalsrin

関連する問題