类和类之间的区别<?>

sen*_*ngs 41 java generics

a ClassClass<?>声明之间有什么区别.

  • Class a;
  • Class<?> b;

Dan*_*ski 41

它与所有通用和原始类型相同:

Class          // An unknown class (raw type)
Class<?>       // An unknown class (generic version)
Class<String>  // The String class
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,它们之间没有太大的实际区别Class,Class<?>因为它们都表示一个未知的类.根据现有的声明,编译器可以要求泛型类型而不是原始类型.

但是:从Java 1.5开始,您应该尽可能使用通用表单.Class<?>明确指出你的意思是"一个未知的阶级",清楚地说明Class<String>你的意思是String班级.原始Class可能意味着两者.

最后,它对编译器没有多大影响,但它使得代码的意图更易于理解和维护,这会产生巨大的差异.

  • 如果可能,您应该避免使用规则而无需解释. (32认同)

mat*_*t b 10

javadoc:

类型参数: T - 此Class对象建模的类的类型.例如,类型String.classClass<String>.使用Class<?>如果模拟类是未知的.

使用Class不带类型参数类似于使用没有类型参数的任何泛型类(Map,List等) - 要么是1.5之前的遗留用法,要么只是一段不关心未经检查的类型转换的代码.