此问题已在此处有答案:
11年前关闭。
可能重复:
Java Class.cast() vs. cast operator
我试图找出Class.cast()
做什么或者它可能有什么好处,但没有成功。同时,我想知道我是否可以通过反射以某种方式投射对象。
首先,我认为下面的代码可能会起作用:
Object o = "A string";
String str = Class.forName("java.lang.String").cast(object);
但是如果没有显式的强制转换,它就无法工作。
那么Class
类的cast
方法有什么好处呢?有没有可能仅仅通过反射来强制转换对象,所以你找到对象的类,对它使用Class.forName
,然后以某种方式强制转换它?
4条答案
按热度按时间5m1hhzi41#
下面是一个使用is的示例:
它允许你写:
代码不工作的原因是Class.forName()返回一个
Class<?>
,即表示未知类型的类对象。虽然编译器可能推断出示例中的类型,但通常不能.考虑:这个表达式是什么类型的?很明显,编译器不知道运行时类名是什么,所以它不知道
是安全的。因此它请求显式强制转换。
bbuxkriu2#
Class.forName
的返回类型将是Class<? extends Object>
。您需要Class<? extends String>
,例如使用String.class
。不是很有用,直到您开始用某种接口类型替换
String
。在任何情况下,反思通常都是邪恶的。
abithluo3#
您可以避免警告,例如:代码如下:
而下面的代码将发出警告:
nzk0hqpo4#
Class.forName
将返回Class<?>
类型的对象。cast
方法将返回Class的类型参数。因此,在这种情况下,它会返回一个?(Object)类型对象。你应该尝试:
Class.cast()