我只是从一本教科书中学习Java的泛型,其中讨论了用GenericStack<E>实现的ArrayList<E>类。

由于要创建一堆字符串,您可以使用

GenericStack<String> = new GenericStack<String>()

要么
GenericStack<String> new GenericStack<>()

因此不应该GenericStack定义为public GenericStack<E>()还是public GenericStack<>()?答案是不。它应该定义为public GenericStack()

为什么是这样?显然,构造函数可以很容易地从类声明中推断类型,但是鉴于Java的冗长性,我有点困惑为什么此处完全摆脱了<E>或只是<>形式主义。

最佳答案

这有两个部分:

  • 为类定义提供的通用类型参数在类本身内可用。
  • 您可以具有特定于单个方法(包括构造函数)的泛型类型。

  • 看下面的例子:
    package snippet;
    
    import java.util.ArrayList;
    
    public class Y<E> extends ArrayList<E> {
    
        public <T> Y(T t) {
        }
    }
    

    由于E类型可用于整个类,因此T类型仅在构造函数中有效。

    10-07 18:51