[英]Adding a generic class to a list that takes generic type
我有一个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);
您声明一个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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.