如何在Java中更改子类中的泛型类型

时间:2017-04-06 19:57:49

标签: java generics

如何更改子类中的泛型类型。我知道,我可以覆盖方法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?

1 个答案:

答案 0 :(得分:2)

使用非原始超类声明PoliceCar类型:

class PoliceCar<T extends Policeman> extends Vehicle<T>

然后load方法将需要T参数,其中TPoliceman的子类。

请参阅What is a raw type and why shouldn't we use it?