Class<? extends A> classB
vs
A classB
这里有什么区别?仅仅是第一个是Class
的实例,第二个是实际Object
的实例?
答案 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>
有点像“元类型”,其实例包含有关类型的信息(此类型可以是A
或A
的子类),而A
是类型你宣布。 A
的实例代表该类要建模的任何事物。 Bicycle
类的实例代表一辆自行车。它可能具有pedal
和turn
之类的方法以及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();