假设我有:
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 实现 IFilter
。如果不将我的类 Components
绑定(bind)到更具体的类定义,我该如何实现这一目标?
最佳答案
编辑:它有效!请参阅底部添加的我的测试。
下面的方法可行吗?
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{}
}
关于java泛型: accepting a class or interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9891446/