我见过这样的代码:
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关键字指定获取一个类对象。