【发布时间】:2015-11-01 13:34:44
【问题描述】:
这是我的示例代码:
public class Bar extends Foo {
}
@SuppressWarnings("unchecked")
public class Foo {
public static void main(String[] args) {
Foo foo = new Bar();
Class<Foo> x = (Class<Foo>) foo.getClass();
System.out.println(x);
}
}
我希望这个程序的输出是:Foo.class,因为我正在转换为 Class 但是我在输出中看到:
class Bar
为什么?
如果我从代码中删除铸造部分,程序甚至不会编译:
java: incompatible types
required: java.lang.Class<Foo>
found: java.lang.Class<capture#1 of ? extends Foo>
为什么编译器强制我强制转换?
【问题讨论】:
-
@RealSkeptic 这些问题有何相同之处?
-
好吧,即使
X和Y,之间存在某种联系,A<X>也不是A<Y>,这就是为什么你不能从Class<? extends X>分配给 @987654329 @。这就是那个问题的要点,也是你问题的要点。