abstract class Vehicle
abstract class Car extends Vehicle
和abstract class Truck extends Vehicle
DodgeRam extends Truck
interface Dump
現在我想限制Dump
接口,使得它只能通過Truck
子類實現,沒有明確表示Truck implement Dump
。我怎樣才能做到這一點?
我想我可以將Dump
更改爲interface Dump<T extends Truck>
,然後說DodgeRam implements Dump<DodgeRam>
。問題是沒有任何東西阻止我說ToyotaCamary implements Dump
,只是離開類型。
UPDATE:
我這樣做的原因是因爲我想避免大量的類型檢查/鑄造的。比方說,我的Truck
有isOffRoad
屬性:
public class Truck {
private boolean isOffRoad;
public Truck(boolean isOffRoad) {
this.isOffRoad = isOffRoad;
}
public boolean isOffRoad() {
return isOffRoad;
}
}
比方說,我也有一個Dealership
它管理我的Vehicle
的名單:
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如何知道?你如何確信一些有割炬和焊機的聰明人不會在豐田卡梅里的後面添加翻車機?你無法知道。 – duffymo
可能是你發佈了錯誤的問題。你能解釋一下你想最終達到什麼嗎? – David
@大衛更新了我的問題 – tir38