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