我有一个Field,如下所示,
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,它接收泛型类型'Object'的'Field'。但是当我创建Field类型字符串并尝试添加到List时,它会失败。 请从潜在的原因帮助我理解这一点。
List<Field<Object>> l = new ArrayList<Field<Object>>();
Field<String> f = new Field<String>();
f.setEventField("Hi");
l.add(f);
答案 0 :(得分:3)
您声明了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);