有没有一种方法可以将对象强制转换为方法的返回值?我尝试过这种方式,但在“ 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); }
您必须使用Class实例,因为在编译过程中会擦除通用类型。
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。
someObject
convertToInstanceOfObject
Object