我正在尝试创建一个名为
的方法public SensorList<Sensor> getSensorList(String sensorType)
返回SensorList
,其中包含特定类型的所有传感器对象,如温度或湿度。
如果sensorType = “temperature”
,则getSensorList
应返回包含测量列表中所有温度对象的SensorList
。
如果sensorType = “humidity”
,则getSensorList
应返回包含测量列表中所有湿度对象的SensorList
。
我们忽略其他类型的传感器。
注意:我已经在类Sensor
中创建了一个名为add的方法,该方法添加到列表中。类Sensor
也有一个属性ArrayList<T>
和两个构造函数,一个默认用于声明arrayList,另一个用于将属性列表初始化为参数List<T>
public SensorList<Sensor> getSensorList(String sensorType) {
if (sensorType.equalsIgnoreCase("sensor")) {
return new SensorList<Sensor>();
} else if (sensorType.equalsIgnoreCase("temperature")) {
return new SensorList<Temperature>();
} else if (sensorType.equalsIgnoreCase("humidity")) {
return new SensorList<Humidity>();
}
}
这是我的代码,但它一直给我错误,所以我该如何解决这个问题呢?
我能否以正确的方式获得有关如何编写方法的任何建议?
答案 0 :(得分:2)
“错误”可能是因为您尚未声明类型Sensor
。
我怀疑你实际想要一个 传感器的类型:
public <T extends Sensor> SensorList<T> getSensorList(String sensorType) {
...
但是你的代码没有添加任何值,因为返回的类型总是不安全的,编译器无法从sensorType
参数推断出类型。
我不知道你的意图是什么,但我建议完全删除这个方法。
答案 1 :(得分:1)
Temperature
的{{1}}和Humidity
子类是什么?您的方法应该返回Sensor
个SensorList
个对象,但其实现可以返回Sensor
个SensorList
或Temperature
个对象。
确保Humidity
和Temperature
类都来自Humidity
或使Sensor
方法的返回类型更通用(不推荐!)例如getSensorList
。
如果没有if语句匹配,你的方法也不会返回任何结果。
答案 2 :(得分:0)
您可以将方法设为通用:
public <T> SensorList<T> getSensorList(Class<T> sensorClass) {
return new SensorList<T>();
}
并调用这样的方法:
getSensorList(Humidity.class);
如果 Humidity 和 Temperature 类是 Sensor 的子类,那么您可以将方法签名中的类型缩小到:
public <T extends Sensor> SensorList<T> getSensorList(Class<T> sensorClass)
答案 3 :(得分:0)
如果你有
ArrayList[Sensor] measurementslist;
您可以检查列表中每个元素的类型,如果它符合您的要求,则添加它:
ArrayList[Sensor] myResultList = new ArrayList[Sensor]();
for (Iterator<Sensor> i = measurementslist.iterator(); i.hasNext();) {
Sensor item = i.next();
if (Temperature.isInstance( item )) {
myResultList.add(item);
}
}