Discuss / Java / 编译不过去啊 n.getClass() == Number.class

编译不过去啊 n.getClass() == Number.class

Topic source

报错信息为

 java: incomparable types: java.lang.Class<capture#1 of ? extends 
java.lang.Integer> and java.lang.Class<java.lang.Number>

小灰晖543

#2 Created at ... [Delete] [Delete and Lock User]

似乎是泛型的问题,我还没学到泛型,所以发表一下自己的拙见。

Integer n = 0;
n.getClass(); // 类型为 Class<capture#1 of ? extends java.lang.Integer>
Number.class; // 类型为 Class<java.lang.Number>
n.getClass() == Number.class; // 编译报错

这两个变量的类型不同,且没有继承关系,直接比较会编译报错。

但是如果在比较之前,把其中一个变量赋给 Class 类的实例,就不会报错:

Integer n = 0;
Class c1 = n.getClass();
Class c2 = Number.class;
System.out.println(n.getClass() == c2);    // false
System.out.println(c1 == Number.class);    // false

  • 1

Reply