一个例子是在哪里工作:
class Favorites {
private Map, Object> map = new HashMap, Object>();
public T get(Class clazz) {
return clazz.cast(map.get(clazz));
}
public void put(Class 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);
是安全的.因此它请求一个明确的转换.