2

我见过这样的代码:

void foo(Class<? extends SomeInterface> clazz)

我有一个像这样的课程:

class ClassA implements SomeInterface

当我尝试时:

ClassA a = new ClassA();
foo(a);

Eclipse 给出了类似“方法不适用”的内容。

我错过了什么?

4

2 回答 2

7

foo方法将Class对象作为参数,而不是该类的实例。

尝试改用类文字:

foo(ClassA.class);

ClassA.class是类的类字面量ClassA,它是 a Class<ClassA>,符合参数 description Class<? extends SomeInterface>

对于foo(a);编译,签名foo会有所不同:

void foo(SomeInterface bar)
于 2013-07-27T00:13:37.107 回答
1

Class本身是一个对象,并且foo(需要一个对象的有界通配符Class

如果ClassA确实实现/扩展SomeInterface(一个或另一个,您使用了不同的术语),则通过ClassA.class. class关键字指定获取一个类对象

于 2013-07-27T00:14:14.123 回答