【发布时间】:2016-10-17 19:30:35
【问题描述】:
我有:
abstract class Vehicle-
abstract class Car extends Vehicle和abstract class Truck extends Vehicle DodgeRam extends Truckinterface Dump
现在我想限制Dump接口,使其只能由Truck的子类实现,而没有明确说明Truck implement Dump。我该怎么做?
我想我可以将Dump 更改为interface Dump<T extends Truck>,然后说DodgeRam implements Dump<DodgeRam>。问题是没有什么能阻止我说出ToyotaCamary implements Dump 并直接放弃类型。
更新:
我这样做的原因是因为我想避免大量的类型检查/转换。假设我的 Truck 有一个 isOffRoad 属性:
public class Truck {
private boolean isOffRoad;
public Truck(boolean isOffRoad) {
this.isOffRoad = isOffRoad;
}
public boolean isOffRoad() {
return isOffRoad;
}
}
假设我还有一个Dealership 来管理我的Vehicles 列表:
public class Dealership {
List<Truck> getTrucks() {...}
List<Dump>getDumpers() {...}
}
现在我想检查我所有的“自卸卡车”的越野能力:
for (Dump dump: dealership.getDumpers() ) {
print dump.isOffRoad();
}
我不想每次都进行类型检查/转换:
for (Dump dump: dealership.getDumpers() ) {
if (dump instanceOf Truck) {
print ((Truck)dump).isOffRoad();
}
}
【问题讨论】:
-
不,没有什么能阻止你。 Java怎么会知道?你怎么确定某个聪明的人会拿着割炬和焊工在某天不会在丰田凯美瑞的后部加装翻斗车?你不知道。
-
可能是您发布了错误的问题。你能解释一下你最终想要达到的目标吗?
-
@David 更新了我的问题