我有一个需要实现的接口。它看起来是这样的:如何将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阅读之后它是有道理的,我欣赏它 –