如何正确地对泛型进行子类化?

时间:2014-09-06 06:59:35

标签: java generics arraylist

我搜索了其他问题/答案,我仍然对这个JAVA问题感到困惑。

如果我想继承一个带有泛型参数的类型,那么在使用子类的泛型参数时如何在没有阴影的情况下这样做呢?

例如:

public class A <T> extends ArrayList<T> {}

因此,如果我实例化我的自定义类,比如说Integers作为参数,那么它的ArrayList部分是否也将该值作为<T>的参数?如果没有,那么我如何指定ArrayList的类型?

我知道在许多情况下,子分类容器可能不是最好的主意,但在这种情况下我认为它是合适的。

1 个答案:

答案 0 :(得分:1)

是的,这将是一个人如何去做。

public static void main(String[] args) {
    B<Integer> b = new B<Integer>();
    b.a = 1;
    b.b = "one";

    b.add(1);
    b.add(2);
}

public static class A<T> extends ArrayList<T> {
    public T a;
}

public static class B<T> extends A<T> {
    public T b;
}

如果你喜欢你甚至可以让它们有不同的类型,只要你提供超类的类型:

public static void main(String[] args) {
    B<Integer, String> b = new B<Integer, String>();
    b.a = 1;
    b.b = "one";

    b.add(1);
    b.add(2);
}

public static class A<T> extends ArrayList<T> {
    public T a;
}

public static class B<U, T> extends A<U> {
    public T b;
}