java - 将泛型类添加到采用泛型类型的列表

标签 java list generics

我有一个字段如下,

public class Field<T> {
    private T eventField;
    /**
     * @return the eventField
     */
    public T getEventField() {
        return eventField;
    }
    /**
     * @param eventField the eventField to set
     */
    public void setEventField(T eventField) {
        this.eventField = eventField;
    }
}

现在我已经声明了一个列表,它接受通用类型“对象”的“字段”。但是当我创建字符串类型的字段并尝试添加到列表时,它失败了。 请帮助我从根本原因上理解这一点。

List<Field<Object>> l = new ArrayList<Field<Object>>();
Field<String> f = new Field<String>();
f.setEventField("Hi");

l.add(f);

最佳答案

您声明了 Field<Object> 的列表:

    List<Field<Object>> l = new ArrayList<Field<Object>>();

所以你不能添加 Field<String> .

你可以声明

List<Field<? extends Object>> l = new ArrayList<Field<? extends Object>>();

或速记版本:

List<Field<?>> l = new ArrayList<Field<?>>();

它将是有效的:

 Field<String> f = new Field<String>();
 f.setEventField("Hi");
 l.add(f);

关于java - 将泛型类添加到采用泛型类型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222071/

相关文章:

Python:匹配列表中的元素

java - 如何指定返回另一个具有类型协变的泛型类型的 java.util.Function?

c# - 将 T 限制为 int 值?

java - 组合条形图和折线图 JfreeChart。尝试用折线图得出 3 点平均值。值未正确排列

java - 正则表达式捕获组无法捕获多个组

python - 使用 xlsxwriter 模块将列表中的数据写入 Excel 工作表中的列

java - 类 StatusCode 扩展 Enum<StatusCode>

java - 如何在不修改应用程序的情况下拦截客户端的 EJB 调用?

java - Swing 工作线程 : Inner class vs passing parameter

python - 初始化列表成员