请告诉我这两种情况有什么区别:
public class Main {
public static void main(String[] args) {
Class c1 = String.class; // Строка 3
Class<?> c2 = String.class; // Строка 4
System.out.println(c1 +", " + c2);
}
}
在第 3 行和第 4 行中,我们做了类似的事情,但是编译器警告说它将c1是对原始类型对象的引用,而c2对于编译器来说,它是对精细对象的良好引用Class<?>
我不明白其中的区别。原始类型和问号参数化类型都Object在运行时同样填充了一个类。是的,在编译过程中,两者都被平等地处理......
也许这只是来自 Java 的一个哲学警告,它误导了原始类型偏离了真理的道路,但Class<?>立即表明程序员的目标是将其推入c2各种类?
Bruce Eckel 在 The Philosophy of Java 中写道,虽然这两个选项是等效的,但使用
Class<?>而不是Class更可取,唯一的例外是Class在编译使用的代码时会发出警告。此外,Ekkel 指出,这种使用Class<?>表明开发人员有一种更有意义的方法来选择类型,而不仅仅是Class出于无知而使用它。