可能的重复:
Java Class.cast() 与强制转换运算符 https://stackoverflow.com/questions/1555326/java-class-cast-vs-cast-operator
我没有成功地试图找出什么Class.cast()
做了什么或者它可能有什么好处。同时我想知道是否可以通过反射以某种方式投射对象。
首先,我认为类似下面的代码可能会起作用:
Object o = "A string";
String str = Class.forName("java.lang.String").cast(object);
但如果没有明确的强制转换,它就不起作用。
那么什么是cast
的方法Class
上课有什么好处?是否可以通过反射来投射对象,以便找到对象的类,使用Class.forName
并以某种方式投射它?
一个有效的例子:
class Favorites {
private Map<Class<?>, Object> map = new HashMap<Class<?>, Object>();
public <T> T get(Class<T> clazz) {
return clazz.cast(map.get(clazz));
}
public <T> void put(Class<T> clazz, T favorite) {
map.put(clazz, favorite);
}
}
它允许你写:
Favorites favs = new Favorites();
favs.put(String.class, "Hello");
String favoriteString = favs.get(String.class);
您的代码不起作用的原因是 Class.forName() 返回一个Class<?>
,即表示未知类型的类对象。虽然编译器可能会推断示例中的类型,但通常不能。考虑:
Class.forName(new BufferedReader(System.in).readLine())
这个表达式的类型是什么?显然编译器无法知道运行时的类名是什么,因此它不知道是否
String s = Class.forName(new BufferedReader(System.in).readLine()).cast(o);
是安全的。因此它要求显式强制转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)