當我有例如一個接口Drivable
和一個實現該接口的類Car
。如果我使用泛型類型Garage<T extends Drivable>
創建類,是否有可能創建新的或繼承不適用於泛型類型,並且它應該是Garage<Drivable>
?Java中通用類型的子類
1
A
回答
2
答案取決於你想放進Garage
'如果你希望能夠把任何類型的Drivable
到Garage
,然後把它聲明爲Garage<Drivable>
什麼類型的Drivable
。如果您只希望該特定實例包含Car
實例,則將其聲明爲是完全可以接受的。
0
是的,你可以實例類型的對象,因爲Car
實現了所需Drivable
接口,因此滿足泛型類型約束。
1
當你創建一個類Garage<T extends Drivable>
,這意味着Garage
可以接受它實現的Drivable
Drivable
或子接口或實現的Drivable
子接口類的類。基本上,它會檢查班級IS-A Drivable
。在這種情況下,由於Car
IS-A Drivable
,您可以有。
0
是的,可以製作。然而,不是Garage<Drivable>
的子類。要知道爲什麼,試想如果是 - 然後將下面的代碼將編譯:
public void putBikeAway(Motorbike bike, Garage<Driveable> garage) {
garage.parkVehicle(bike);
}
Garage<Car> garage = new Garage<Car>();
Garage<Drivable> dgarage = garage; // doesn't compile in reality
Motorbike b = new Motorbike();
putBikeAway(b, dgarage);
// We now have a Motorbike in a Garage<Car>!
// So later on...
Car car = garage.getVehicle(); // throws ClassCastException at runtime
出於這個原因,是不的Garage<Drivable>
實例(因爲如果它是你可以添加一個Motorbike
它,並且泛型類型安全性被完全顛覆)。相反,在我的例子中,第6行會出現編譯時錯誤。
相關問題
- 1. 通用類型自引用類型的Java子類問題
- 2. Java - 返回類型的通用類型
- 3. Java - 通用類型
- 4. 通用類型java
- 5. Java通用 - 子類型檢查?
- 6. 在Java中改變類型的子類
- 7. 類型轉換的子類在Java中
- 8. Java泛型:子類化一個通用的超類 - 子類是一個可定義的類型?
- 9. Java通用類型變量
- 10. Java通用類型問題
- 11. Java返回類型通用
- 12. 在java中使用通配符類型
- 13. 在java中創建超類的類型的子類對象
- 14. 獲取類的通用類型的Java中
- 15. 如何更改Java中子類的泛型類型
- 16. 從子類(Java)設置超類中字段的類型
- 17. 實例化的子類通用類型類
- 18. 類型類和子類型
- 19. Java通用類型系統的更新
- 20. 內部類中的通用類型
- 21. 基於Java中超類和子類的泛型類型的多重限制
- 22. Flow中的子類型內置類型
- 23. NSManagedObject子類中的泛型類型
- 24. 通用類型的Linq類型轉換
- 25. 類型「類型」不是通用的
- 26. 調用泛型參數類型的子類型的通用方法
- 27. 如何讓Java Iterable返回基類擴展通用的子類型
- 28. 類型的通用
- 29. .NET:如何檢查通用類型類中的類型?
- 30. 不能像通用方法類型一樣使用Java通用字段類型?
當你嘗試過什麼? – 2013-05-08 14:38:09
適合我,我沒有看到問題。 – stealthjong 2013-05-08 14:41:31