java泛型: accepting a class or interface

标签 java generics

假设我有:

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/

相关文章:

java - 如何使用 Eclipse 将 cmd 变量发送到 java main 函数

java - 在映射器文件中访问mybatis sql中的公共(public)静态最终字符串

java - 如何创建只接受实现 Iterable 的元素的方法

c# - 在本地窗口中更改 T 类型 int

java - 覆盖接口(interface)方法

java - 我想知道编译时决策的含义

java - SPRING BOOT注释: are they required

java - 将 Canvas 的特定区域设置为可点击

c# - Progress<T> 与 Action<T> 有何不同? (C#)

java - Collection<?> 和 Collection<T> 有什么区别