Class <!-?之间的区别扩展了A->与A

时间:2018-08-10 05:23:30

标签: java generics

Class<? extends A> classB

vs

A classB

这里有什么区别?仅仅是第一个是Class的实例,第二个是实际Object的实例?

2 个答案:

答案 0 :(得分:3)

Class<? extends A>A完全是两种不同的类型。

类型Class<? extends A>的变量包含有关 class 的信息。该类可以是A或任何扩展A的类,具体取决于变量的值。使用Class<? extends A>变量可以做的事情包括:获取在类中声明的所有字段名称,获取在类中声明的所有方法名称,获取类的超类,等等。

类型A的变量引用A的实例。如果您在类foo中声明了一个名为A的非静态方法,则可以使用以下变量直接调用foo

yourVariable.foo();

如果yourVariable类型为Class<? extends A>,则不能直接执行此操作。

看到这里的区别了吗? Class<? extends A>有点像“元类型”,其实例包含有关类型的信息(此类型可以是AA的子类),而A是类型你宣布。 A的实例代表该类要建模的任何事物。 Bicycle类的实例代表一辆自行车。它可能具有pedalturn之类的方法以及durability之类的字段。 Class<? extends Bicycle>的实例将告诉您:在Bicycle类中,有一个名为durability的字段,还有一个名为pedal的方法。

基本上,“ meta”是此处的关键字。 Class是代表一个类的一个类。

答案 1 :(得分:0)

第一个

Class<? extends A> classB

定义类型为Class的成员,该成员表示正在运行的Java应用程序中的类和接口 Class

所以你可以写

classB = A.class;
classB = AExtended.class;

第二个

A classB

定义类型A的成员,以便您可以编写

classB = new A();
classB = new AExtended();