當我有例如一個接口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. 通用子類型繼承
- 14. 帶通配符,基類和子類的Java泛型的問題
- 15. 根據子類定義泛型類的父類方法Java中的類型
- 16. 在java中使用通配符類型
- 17. 通用函數子類在Java中
- 18. 在java中創建超類的類型的子類對象
- 19. 通用類型作爲通用類型
- 20. DataContractJsonSerializer包含元素類型的子類型的通用列表
- 21. 獲取Java類中的通用字段的類型
- 22. 獲取類的通用類型的Java中
- 23. Java:在子類型中指定泛型類型限制
- 24. 如何更改Java中子類的泛型類型
- 25. 從子類(Java)設置超類中字段的類型
- 26. 具有多個子類型的Scala通用(元組)類型
- 27. Java通用類只接受特定的類類型?
- 28. 如何在java中定義通用類型的類
- 29. 實例化的子類通用類型類
- 30. 創建子類(特定)或超類(通用)類型的對象?
當你嘗試過什麼? – 2013-05-08 14:38:09
適合我,我沒有看到問題。 – stealthjong 2013-05-08 14:41:31