我把我要做的事情煮成以下最小代码:
public class TestClass {
class Class2Extend {
}
class Foo {
public Foo(Class<Class2Extend> myClass) {
}
}
class Bar extends Class2Extend{
}
public TestClass() {
new Foo(Class2Extend.class); // works fine
//new Foo(Bar.class); -> fails even though Bar extends Class2Extend - but I want something like this to have nice code
}
}
我可以使用界面,但这样会更干净。任何人都可以给我一个关于这个问题的提示/技巧吗?
答案 0 :(得分:13)
更改为:
class Foo {
public Foo(Class<? extends Class2Extend> myClass) {
}
}
当你说你的参数类型为Class<Class2Extend>
时,Java与该参数类型完全匹配,而不是与任何子类型匹配,你必须明确指定你想要任何扩展Class2Extend的类。
答案 1 :(得分:2)
如果您将Foo
构造函数更改为允许子类,则可以按照您希望的方式调用它:
public class TestClass {
class Class2Extend {
}
class Foo {
public Foo(Class<? extends Class2Extend> myClass) {
}
}
class Bar extends Class2Extend{
}
public TestClass() {
new Foo(Bar.class); // works fine
}
}
答案 2 :(得分:2)
试试这个Foo构造函数。
public Foo(Class<? extends Class2Extend> myClass) {...