如何更改子类中的泛型类型。我知道,我可以覆盖方法load();但我想为所有孩子制定通用方法。 我有抽象超类
public abstract class Vehicle <T extends Human> {
T t;
private final int maxPassengers;
private Set<T> currentPassengers = new HashSet<>();
public Vehicle(int maxPassengers) {
this.maxPassengers = maxPassengers;
}
public void load (T human) throws ToManyPassangersExeption {
if (currentPassengers.size()<maxPassengers)
currentPassengers.add(human);
else
throw new ToManyPassangersExeption();
}
}
load()实现将人类加载到车辆。我有不同类型的人类。例如:
public class Policeman extends Human {
}
在我的班级警察车里,我只能装载警察。
public class PoliceCar <T extends Policeman> extends Vehicle {
T t;
public PoliceCar() {
super(5);
}
}
使用此代码,我可以将所有instanceof Human加载到PoliceCar。
如何在没有Overriding方法加载()的情况下加载PoliceCar中的Policeman?
答案 0 :(得分:2)
使用非原始超类声明PoliceCar
类型:
class PoliceCar<T extends Policeman> extends Vehicle<T>
然后load
方法将需要T
参数,其中T
是Policeman
的子类。