一尘不染

将对象转换为通用类型以返回

java

有没有一种方法可以将对象强制转换为方法的返回值?我尝试过这种方式,但在“ 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);
}

阅读 194

收藏
2020-09-08

共1个答案

一尘不染

您必须使用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);

请注意,当someObject传递给时,convertToInstanceOfObject它具有编译时间类型Object

2020-09-08