【发布时间】:2013-01-09 14:10:38
【问题描述】:
有没有办法将对象转换为方法的返回值? 我尝试过这种方式,但它在“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);
}
【问题讨论】:
-
为什么最后一个应该打印
null?而且,您为什么不返回Object? Java 擦除无论如何都会将您的泛型转换为Object,那么您为什么不直接写public static Object convertInstanceOfObject? -
我可以稍后决定,但我想捕捉 ClassCastException :) 我想知道的是,一个对象在转换之前是另一个对象的实例,我不知道它实际类型。