传递一个扩展另一个类的类

时间:2012-03-27 11:32:16

标签: java class

我把我要做的事情煮成以下最小代码:

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
    }
}

我可以使用界面,但这样会更干净。任何人都可以给我一个关于这个问题的提示/技巧吗?

3 个答案:

答案 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) {...