gab*_*k00 3 java oop design-patterns
我在另一篇文章中询问了一个类似的问题(如何从不需要强制转换的派生类实现一个方法),但这更具体一些.假设我有3个类:车辆,汽车,敞篷车.汽车延伸车辆,敞篷车延伸汽车.我想为每个类返回一个方法,该方法返回一个不需要在运行时强制转换的列表.经过一番思考后我认为这是不可能的,但我也想听听你的意见
public class Vehicle {
public List<? extends Vehicle> getList() {
return new ArrayList<Vehicle>();
}
}
public class Car extends Vehicle {
@Override
public List<? extends Car> getList() {
return new ArrayList<Car>();
}
}
public class Convertible extends Car {
@Override
public List<? extends Convertible> getList() {
return new ArrayList<Convertible>();
}
}
Run Code Online (Sandbox Code Playgroud)
为了不使用强制转换,我必须在list(List<Convertible>)中返回特定类型的元素,但如果我想扩展Convertible类,我就不能再这样做了.
这种情况有什么办法吗?
你可以写
public class Vehicle<V extends Vehicle> {
public List<V> getList() {
return new ArrayList<V>();
}
}
public class Car<C extends Car> extends Vehicle<C> {
}
public class Convertible extends Car<Covertible> {
}
Run Code Online (Sandbox Code Playgroud)