通过反射和使用Class.cast()进行投射

我一直在尝试找出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);

是安全的。因此,它要求显式转换。

以上是 通过反射和使用Class.cast()进行投射 的全部内容, 来源链接: utcz.com/qa/421515.html

回到顶部