我有一个字段如下

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);

09-16 06:19