[英]Generic List initialization in java
我对List的初始化有疑问。 项目的类在编译时未知-它们可以是int,float,string或自定义类。
所以我尝试了这个:
public class Sensordevice {
private List<?> valueList;
public void setValueList(List<?> valueList) {
this.valueList = valueList;
}
public void addValue(Object value) {
if(valueList == null){
valueList = getList(value.getClass());
}
valueList.add(value);
}
private <T> List<T> getList(Class<T> requiredType) {
return new ArrayList<T>();
}
}
但是我在addValue方法中的valueList.add(value)处收到此错误:
类型List中的方法add(capture#4-of?)不适用于参数(对象)
更新
非常感谢您的回复。 此解决方案适用于我。
public class Sensordevice<T> {
private List<T> valueList;
public void setValueList(List<T> valueList) {
this.valueList = valueList;
}
public void addValue(T value) {
if(valueList == null){
valueList = new ArrayList<T>();
}
valueList.add(value);
}
}
因此,如果您不知道您要使用的特定类型,请使您的类通用:
public class Sensordevice<T> {
private List<T> valueList;
public void setValueList(List<T> valueList) {
this.valueList = valueList;
}
public void addValue(T value) {
if(valueList == null){
valueList = getList(value.getClass());
}
valueList.add(value);
}
private List<T> getList() {
return new ArrayList<T>();
}
}
这对我有用。 “工作”是指我没有任何错误。 它似乎没有提供任何功能,因为没有任何方法可以从Sensordevice
获取对象列表,因为getList
只是返回一个新的空列表,但这就是您提供的代码。 我认为错误的核心是让addValue
采用Object
而不是T
public class Sensordevice {
private List valueList;
public <T> void setValueList(List<T> valueList) {
this.valueList = valueList;
}
public <T> void addValue(T value) {
if(valueList == null){
valueList = getList(value.getClass());
}
valueList.add(value);
}
private <T> List<T> getList(Class<T> requiredType) {
return new ArrayList<>();
}
}
public static void main(String[] args) {
Sensordevice sd = new Sensordevice();
sd.addValue(new Object());
sd.addValue(new Integer(3));
sd.addValue("");
sd.addValue(new Sensordevice());
System.out.println(sd.getList(Sensordevice.class));
}
如果您不知道List类型,则可以不指定任何类型说明,只需输入: private List valueList;
将valueList
更改为:private List valueList; 和getList()
可以:
private <T> List<Object> getList(Class<T> requiredType) {
return new ArrayList<Object>();
}
这样可以修复错误,并且看起来可以正常工作。 我用字符串,浮点数和整数进行了测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.