2012-03-27 99 views
1

比方说,我有:Java泛型:接受类或接口

public class Components<T> extends TupleList<Class<T>, String> { 

    private static final long serialVersionUID = 1L; 

    public void add(Class<T> classe, String name) { 
     this.add(new Tuple<Class<T>, String>(classe, name)); 
    } 
} 

我希望能够做到以下几点:

Components<IFilter> engines=new Components<IFilter>(){{ 
    add(FilterEngineIdentity.class, "Identity"); 
}}; 

其中FilterEngineIdentity implements IFilter。我怎样才能达到这一点,而不需要将我的类Components绑定到更具体的类定义?

+0

可能重复的[java泛型:接受类中的接口](http://stackoverflow.com/questions/9891216/java-generics-accepting-an-interface-in-classt) – 2012-03-27 14:24:30

+0

没有不重复,在上一个问题中,我的要求并不够具体。 – jldupont 2012-03-27 14:25:54

+0

你真的可以做这个类TupleList ,E> {}? – Delta 2012-03-27 14:57:56

回答

2

编辑:它的工作原理!看到我的测试添加在底部。

请问以下工作?

Class<? extends T> 

全班同学:

public class Components<T> extends TupleList<Class<?extends T>, String> { 

    private static final long serialVersionUID = 1L; 

    public void add(Class<? extends T> classe, String name) { 
     this.add(new Tuple<Class<? extends T>, String>(classe, name)); 
    } 
} 

测试(编译没有我的机器上的Java 1.7的问题,但我没有使用<>所以它应该工作与其他版本精):

public interface Interface {} 

public class Test<T> 
{ 
public void add(Class<? extends T> x) 
{ 

} 

public static void x() 
{ 
    Test<Interface> t = new Test<Interface>(); 
    t.add(Implementation.class); 
} 

public static class Implementation implements Interface{} 
} 
+0

当然(稍作修改)!谢谢! – jldupont 2012-03-27 14:34:30

0

现在我明白你在找什么,我想这是更清晰,类型安全:

public interface Interface { 
} 

public class Test<T> { 

    public <K extends T> void add(Class<K> x) { 

    } 

    public static void x() { 
     Test<Interface> t = new Test<Interface>(); 
     t.add(Implementation.class); 
    } 

    public static class Implementation implements Interface { 
    } 
} 
+0

这不是我要求的。 – jldupont 2012-03-27 14:34:19