我见过这样的代码:
void foo(Class<? extends SomeInterface> clazz)
我有一个像这样的课程:
class ClassA implements SomeInterface
当我尝试时:
ClassA a = new ClassA();
foo(a);
Eclipse 给出了类似“方法不适用”的内容。
我错过了什么?
该foo
方法将Class
对象作为参数,而不是该类的实例。
尝试改用类文字:
foo(ClassA.class);
ClassA.class
是类的类字面量ClassA
,它是 a Class<ClassA>
,符合参数 description Class<? extends SomeInterface>
。
对于foo(a);
编译,签名foo
会有所不同:
void foo(SomeInterface bar)
Class
本身是一个对象,并且foo(
需要一个对象的有界通配符Class
。
如果ClassA
确实实现/扩展SomeInterface
(一个或另一个,您使用了不同的术语),则通过ClassA.class
. class
关键字指定获取一个类对象。