是否有方法强制转换对象以返回方法的值?我尝试了这种方法,但在“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);
}
3条答案
按热度按时间bxpogfeg1#
如果您不想依赖于抛出异常(您可能不应该这样做),您可以尝试以下方法:
jaql4c8m2#
你必须使用
Class
示例,因为编译期间泛型类型擦除。该方法的声明如下:
这也可用于数组类型。它看起来是这样的:
注意,当
someObject
传给convertToInstanceOfObject
它具有编译时类型Object
.oymdgrw73#
我偶然发现了这个问题,它引起了我的兴趣。被接受的答案是完全正确的,但我认为我确实提供了jvm字节码级别的发现,以解释op遇到错误的原因
ClassCastException
.我的代码与op的代码几乎相同:
对应的字节码为:
注意
checkcast
字节码指令发生在主方法中,而不是convertInstanceOfObject
及convertInstanceOfObject
方法没有任何可以抛出的指令ClassCastException
. 因为main方法没有捕获ClassCastException
因此,当您执行main方法时,您将得到一个ClassCastException
而不是印刷业的期望null
.现在,我将代码修改为已接受的答案:
相应的字节码为:
请注意,有一个
invokevirtual
课堂教学convertInstanceOfObject
调用Class.cast()
抛出的方法ClassCastException
哪个会被警察抓住catch(ClassCastException e)
回程null
; 因此,“null”毫无例外地打印到控制台。