我有一个字段如下
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);