2012-03-27 104 views
3

我煮我想做以下最少的代码的东西一类:通过扩展另一个类

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

我可以用一个接口,但它是清洁的这种方式。任何人都可以就这个问题给我一个提示/窍门?

回答

12

更改为:

class Foo { 
    public Foo(Class<? extends Class2Extend> myClass) { 

    } 
} 

当你说你的论点是类型Class<Class2Extend>的Java完全匹配该参数类型,没有任何的子类型,你必须明确地指定要扩展任何类Class2Extend。

+0

确切的答案! – logoff 2012-03-27 11:37:36

+0

非常感谢!将尽可能接受(您可以在5分钟内接受答案) – ligi 2012-03-27 11:42:36

1

,你可以把它叫做你想如果你改变了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 
    } 
} 
1

试试这个为你的Foo构造函数。

public Foo(Class<? extends Class2Extend> myClass) {...