当我有例如一个接口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