gpt4 book ai didi

java - 对泛型类的引用的比较

转载 作者:行者123 更新时间:2023-12-03 07:08:31 26 4
gpt4 key购买 nike

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>()); ”,编译器会说“不可比较类型”。

最佳答案

r1r2 可能包含任何 Class 实例的引用,因此它们可能包含对同一 Class 的引用。因此编译器允许这种比较。

当您比较 - new A().getClass() == new B().getClass() 中的绑定(bind) Class 实例时 - 编译器知道它们不是同一类型,并且因此不允许这样做。

关于java - 对泛型类的引用的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28675594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com