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