【发布时间】:2017-03-19 10:38:44
【问题描述】:
我有一个需要实现的接口。它看起来像这样:
public interface SimulationState {
...
public Iterable<VehicleStatus> getVehicleStatuses();
}
我正在尝试将接口扩展为某种装饰器接口,如下所示:
public interface SimulationStateDec<V extends VehicleStatus> extends SimulationState {
...
@Override
public Iterable<V> getVehicleStatuses();
}
或
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 尽管我的具体类中的 Iterable
所以在我的项目中,我正在调用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);
}
}
我知道我在这里做错了,我想知道是否允许这种实施方式。 编译器告诉我更改实现接口中的方法,它不适用于我的应用程序必须在不同的框架上工作。
我需要返回实现相同接口的各种具体类型,而不必强制转换每个元素。
【问题讨论】:
-
这可能是个好问题,但您需要提供更多详细信息,例如 minimal reproducible example 显示您打算如何使用该界面。就目前而言,这个问题太模糊了。
-
是的,读后觉得有道理,我很感激
标签: java oop generics overriding decorator