162

オブジェクトをキャストしてメソッドの値を返す方法はありますか?この方法を試しましたが、「instanceof」の部分でコンパイル時の例外が発生しました。

public static <T> T convertInstanceOfObject(Object o) {
    if (o instanceof T) {
        return (T) o;
    } else {
        return null;
    }
}

これも試しましたが、実行時例外ClassCastExceptionが発生しました。

public static <T> T convertInstanceOfObject(Object o) {
    try {
        T rv = (T)o;
        return rv;
    } catch(java.lang.ClassCastException e) {
        return null;
    }
}

これを簡単に行うための可能な方法はありますか?

String s = convertInstanceOfObject("string");
System.out.println(s); // should print "string"
Integer i = convertInstanceOfObject(4);
System.out.println(i); // should print "4"
String k = convertInstanceOfObject(345435.34);
System.out.println(k); // should print "null"

編集:私は正解の作業コピーを書きました:

public static <T> T convertInstanceOfObject(Object o, Class<T> clazz) {
    try {
        return clazz.cast(o);
    } catch(ClassCastException e) {
        return null;
    }
}

public static void main(String args[]) {
    String s = convertInstanceOfObject("string", String.class);
    System.out.println(s);
    Integer i = convertInstanceOfObject(4, Integer.class);
    System.out.println(i);
    String k = convertInstanceOfObject(345435.34, String.class);
    System.out.println(k);
}
4

3 に答える 3

241

Classコンパイル中にジェネリック型が消去されるため、インスタンスを使用する必要があります。

public static <T> T convertInstanceOfObject(Object o, Class<T> clazz) {
    try {
        return clazz.cast(o);
    } catch(ClassCastException e) {
        return null;
    }
}

そのメソッドの宣言は次のとおりです。

public T cast(Object o)

これは配列型にも使用できます。次のようになります。

final Class<int[]> intArrayType = int[].class;
final Object someObject = new int[]{1,2,3};
final int[] instance = convertInstanceOfObject(someObject, intArrayType);

someObjectwhenが渡されるconvertToInstanceOfObjectとコンパイル時の type を持つことに注意してくださいObject

于 2013-01-25T15:19:52.510 に答える