Java中的类与类<t>

时间:2018-05-18 16:25:23

标签: java generics

这两行代码之间有区别吗?或者第一行只是简写方式还是写第二行?

Class cls1 = Person.class;
Class<Person> cls2 = Person.class;

1 个答案:

答案 0 :(得分:1)

两者之间的区别仅在编译时很重要。

byte[]允许类型安全和静态类型检查。例如,编译器完全理解以下代码,并减少不必要的类型转换。此外,它是类型安全的:

Class<Person>

但是,使用原始Class<Person> personClass = Person.class; Person person = personClass.newInstance(); //Great! Return type is Person 类型的相同版本并未提供上述代码的类型安全优势:

Class

编译器抱怨最后一句话:

  

类型不匹配:无法从Object转换为Person

虽然它实际上是相同的Class personClass2 = Person.class; Person person2 = personClass2.newInstance(); //error 实例,但通用版本允许静态类型检查,这提供了安全性并避免了不必要的类型转换。

然而,在运行时,两者基本相同。

Class

当与反射一起使用或以其他方式检查时,两者没有区别,因为实例是相同的并且通用类型被删除。