public class Main {
static class A {};
static class B {};
public static void main(String[] args) {
Class<?> r1 = new A().getClass();
Class<?> r2 = new B().getClass();
boolean a = (r1 == r2); //it is ok
boolean b = (new A().getClass() == new B().getClass()); //compilation error
}
}
r1是对类型Class<A>
的引用,并且r2是对类型Class<B>
的引用。我想这是不正确的比较它们。但编译器不会在字符串“boolean a = (r1 == r2);
”中产生错误为什么?它如何在泛型类型安全方面起作用?参考通用类别的比较
例如,您无法比较“boolean c = (new ArrayList<String>() == new ArrayList<Integer>());
”,编译器会说'无法比拟的类型'。
如果你想检查一个对象的类,使用'instanceof'。 – m0skit0 2015-02-23 14:11:50
你是否在最后一段的比较中加入了'.getClass()'? – arootbeer 2015-02-23 14:12:37
但是你不能用这种方式比较它们,即OP意图 – 2015-02-23 14:13:02