我用如下聲明一個抽象類的部分抽象方法:如何使方法參數類型的ArrayList <Object>採取不同的對象類型
abstract public ArrayList<Device> returnDevices(ArrayList<Object> scanResult);
我想傳遞是一個ArrayList參數,但ArrayList中的類型對象將依賴於繼承此超類的子類並實現方法returnDevices。
我認爲我可以做的方法抽象如上做到這一點,然後在繼承它做類似的子類:
public ArrayList<Device> returnDevices(ArrayList<Object> scanResult) {
Iterator<Object> results = scanResult.iterator();
while(results.hasNext())
Packet pkt = (Packet) results.next(); // HERE: I cast the Object
}
這很好,不會導致錯誤,但當我嘗試使用ArrayList<Packet>
類型的參數,如下面的調用returnDevices:
ArrayList<Packet> packets = new ArrayList<Packet>();
// <----- the "packets" ArrayList is filled here
ArrayList<Device> devices = returnDevices(packets);
...我得到的錯誤:
The method returnDevices(ArrayList<Object>) in the type ScanResultParser is not applicable for the arguments (ArrayList<Packet>)
顯然它拒絕參數類型。什麼是實現我想要做的事情的正確方法?
閱讀[泛型和通配符](http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html)和[通用方法](http://docs.oracle.com/javase /tutorial/extra/generics/methods.html) – Sujay
不存在問題的上下文:使用「列表」作爲類型而不是具體實現。從來沒有理由使用ArrayList作爲參數/返回值,並且它使代碼更加靈活 –