2017-05-09 31 views
-1

值添加到列表中,我試圖創造一種稱爲如何用Java

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

} 

這是我的代碼,但它不斷給我的錯誤所以我怎麼能解決這個問題?

我能否以正確的方式得到關於如何編寫方法的建議?

+3

「*,但它不斷給我的錯誤* 「 - 呃,有什麼錯誤? – hagrawal

+2

這是因爲您返回的是您聲明爲返回SensorList 的方法中的回收對象,但是我看到您返回SensorList ()和SensorList ()這與您在方法中聲明的列表不同 – MaQuiNa1995

+1

是溫度和溼度是傳感器的一個子類?因爲您的方法需要傳感器類型爲Sensor的對象作爲返回值。 –

回答

0

你可以讓你的方法一般:

public <T> SensorList<T> getSensorList(Class<T> sensorClass) { 
    return new SensorList<T>(); 
} 

並調用該方法是這樣的:

getSensorList(Humidity.class); 

如果溼度溫度傳感器的子類,那麼您可以將方法簽名中的類型縮小爲:

public <T extends Sensor> SensorList<T> getSensorList(Class<T> sensorClass) 
2

「錯誤」可能是因爲您尚未聲明類型爲Sensor

我懷疑你實際上想要一個類型一個傳感器:

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

,但你的代碼沒有任何價值,因爲返回的類型始終是不安全的,編譯器不能推斷從類型sensorType參數。

我不知道你的意圖是什麼,但我建議完全刪除這個方法。

1

TemperatureHumidity的子類Sensor?您的方法應該返回SensorListSensor對象,但其實現可以返回SensorListTemperatureHumidity對象。

確保兩個TemperatureHumidity類從Sensor延長或使getSensorList方法更通用的返回類型(不推薦)諸如SensorList<Object>

當沒有if語句匹配時,您的方法也不會返回任何結果。

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); 
    } 
}