这两行代码之间有区别吗?或者第一行只是简写方式还是写第二行?
Class cls1 = Person.class;
Class<Person> cls2 = Person.class;
答案 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
当与反射一起使用或以其他方式检查时,两者没有区别,因为实例是相同的并且通用类型被删除。