如何在java中向列表中添加值

时间:2017-05-09 13:50:36

标签: java list arraylist

我正在尝试创建一个名为

的方法
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>();
    }

}

这是我的代码,但它一直给我错误,所以我该如何解决这个问题呢?

我能否以正确的方式获得有关如何编写方法的任何建议?

4 个答案:

答案 0 :(得分:2)

“错误”可能是因为您尚未声明类型Sensor

我怀疑你实际想要一个 传感器的类型:

public <T extends Sensor> SensorList<T> getSensorList(String sensorType) {
    ...

但是你的代码没有添加任何值,因为返回的类型总是不安全的,编译器无法从sensorType参数推断出类型。

我不知道你的意图是什么,但我建议完全删除这个方法。

答案 1 :(得分:1)

Temperature的{​​{1}}和Humidity子类是什么?您的方法应该返回SensorSensorList个对象,但其实现可以返回SensorSensorListTemperature个对象。

确保HumidityTemperature类都来自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);
  }
}