我见过这样的代码:
void foo(Class<? extends SomeInterface> clazz)
我有一个类:
class ClassA implements SomeInterface
当我尝试时:
ClassA a = new ClassA();
foo(a);
Eclipse提供了类似“方法不适用”的内容。
我错过了什么吗?
答案 0 :(得分:7)
foo
方法将Class
对象作为参数,而不是该类的实例。
请尝试使用类文字:
foo(ClassA.class);
ClassA.class
是ClassA
类的类文字,它是Class<ClassA>
,符合参数说明Class<? extends SomeInterface>
。
要编译foo(a);
,foo
的签名会有所不同:
void foo(SomeInterface bar)
答案 1 :(得分:1)
Class
本身就是一个对象,而foo(
需要一个Class
对象的有界通配符。
如果ClassA
确实实现/扩展SomeInterface
(一个或另一个,您使用了不同的术语),则传递ClassA.class
。 class
关键字指定获取类对象。