好吧,首先让我们弄清楚问题出在哪里-它在演员表中。这是一个简短的示例:
public class Test { public static void main(String[] args) throws Exception { Object x = (Class<Test>) Class.forName("Test"); }}这仍然有同样的问题。问题在于强制
Class类型转换实际上不会测试任何东西-
因为强制类型转换将有效地转换为原始类型。因为
Class<T>这有点让人惊讶,因为实际上对象 确实 知道所涉及的类,但是考虑类似的情况:
List<?> list = ... get list from somewhere;List<String> stringList = (List<String>) list;
该类型转换将不会检查它是否 确实 是a
List<String>,因为该信息会由于 类型擦除 而丢失。
现在以您的情况为例,实际上有一个更简单的解决方案-如果您仍然在编译时知道类名,则只需使用:
Class<Foo> fooClass = Foo.class;
如果您可以提供一个更实际的示例(实际情况 并非 如此),我们可以帮助您确定最合适的替代方法。



