我有一個需要實現的接口。它看起來是這樣的:如何將Iterable <interface>返回類型方法重寫爲Iterable <?擴展接口>返回類型方法
public interface SimulationState {
...
public Iterable<VehicleStatus> getVehicleStatuses();
}
我試圖接口擴展成某種裝飾器界面如下:
public interface SimulationStateDec<V extends VehicleStatus> extends SimulationState {
...
@Override
public Iterable<V> getVehicleStatuses();
}
OR
public interface SimulationStateDec<V extends VehicleStatus> extends SimulationState {
...
@Override
public Iterable<? extends VehicleStatus> getVehicleStatuses();
}
這裏的具體的類我正在實現的接口在:
public class WareHouseState implements SimulationState {
...
@Override
public Iterable<VehicleStatus> getVehicleStatuses() {
return this.vStatuses;
}
}
我實現在一個名爲VehicleState類VehicleStatus接口,這樣我可以在我的項目一類我打電話我具體的類
所以返回實現VehicleState 雖然可迭代該getVehicleStatuses()
方法 ,我有義務每一個元素轉換爲VehicleState如下所示:
public class Gate {
...
private ArrayList<VehicleThread> vehicles;
public Gate(WareHouse wareHouse, GatePriority priority) {
...
this.vehicles = new ArrayList<>();
wareHouseState.getVehicleStatuses().forEach(v -> vehicles.add(new VehicleThread((VehicleState) v, wareHouse)));
sortSameTimeArrivalBy(priority);
}
}
我知道我在這裏做錯了事,我想知道是否允許這種實現方式。 編譯器告訴我在實現的接口中更改方法,它不適用於我的應用程序必須在不同的框架上工作。
我需要返回各種實現相同接口的具體類型,而無需投射每個元素。
這可能是一個很好的問題,但您需要提供更多詳細信息,例如顯示您打算如何使用界面的[mcve]。目前來看,這個問題太模糊了。 –
請仔細閱讀以瞭解問題:https://docs.oracle.com/javase/tutorial/java/generics/inheritance.html –
yes閱讀之後它是有道理的,我欣賞它 –