java - 如何正确子类泛型?

标签 java generics arraylist

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

如果我想对采用泛型参数的类型进行子类化,那么在为子类使用泛型参数的同时又不被隐藏时,我该如何实现呢?

例如:

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

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

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

最佳答案

是的,这就是人们要做的事情。

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;
}

如果你愿意,你甚至可以让它们有不同的类型,只要你也为父类(super class)提供它的类型:

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;
}

关于java - 如何正确子类泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697739/

相关文章:

java - 如何避免 List<Map<String, String>> 中出现重复?

java - 通过 java 执行时 SQL 运行缓慢

Java Try 和 Catch IOException 必须被捕获或声明被抛出

java - 使用原始类型实现通用接口(interface)

java - Eclipse 格式化程序 : Wrap Nested ArrayList Declarations

Java:如何在arraylist中写入计算数据?

java - 如何从我的 Java 应用程序运行批处理文件?

java - 调试 Junit 时,Eclipse 中未命中断点

c# - 泛型 - 使用父类指定泛型中的类型

c# - 重构两个方法以使用接口(interface)和/或泛型