首页
学习
活动
专区
圈层
工具
发布

Java:集合
EN

Stack Overflow用户
提问于 2016-05-14 19:48:13
回答 2查看 65关注 0票数 0

我正在创建一个具有ArrayList的类,因此当我调用构造函数时,它会初始化该数组:

代码语言:javascript
复制
public class ElementsList<E>
{
    private ArrayList<E> list;

    public ElementsList()
    {
        list = new ArrayList<E>;
    }
}

我不明白为什么当你创建构造器时,你真的不需要提到这个类将保留某些元素的事实。我的意思是你不需要这样做:

代码语言:javascript
复制
public ElementsList<E>{

  list = new ArrayList<E>;
}

长话短说:为什么类名是ElementsList<E>,而构造函数没有<E>部分?

EN

回答 2

Stack Overflow用户

发布于 2016-05-14 20:08:08

在构造函数声明中,您不需要再次提到元素类型E,因为您已经在类声明级别上这样做了。

例如,您已经声明了您的类

代码语言:javascript
复制
public class ElementsList<E> {

所以标识符E已经表示了您的元素类型。

将构造函数编写为

代码语言:javascript
复制
   public <E> ElementsList() {...}

将有效地表示独立于您的类的元素类型的另一种类型。

票数 5
EN

Stack Overflow用户

发布于 2016-05-14 19:54:21

你的列表不是最终的。如果是,那么您将能够强制初始化。但是,如果您在代码中使用此列表,IDE将会警告您此参数可能尚未初始化。此外,您还使用了关键字。即使构造函数中不需要任何参数,也必须指定()。这就是new关键字在构造器中创建单个实例的工作方式。例如,对于数组,您不需要这样做。如果你不想使用新的,你有几个选择。看看这一页。Design patterns。对于本例,我认为您正在寻找的是一种工厂模式。而且,如果您查看您的类声明,您指定的是一个泛型类型E。这个类已经知道类型E是什么。如果你想用另一种类型做一个构造器,那就没有意义了。这就是为什么在类的声明中指定它就足够了。一旦你的元素被创建,E将是一个已知类型。例如,如果我想要一个处理Integer类型的元素:

代码语言:javascript
复制
ElementsList<Integer> e = new ElementsList<>();

现在我知道我的list里面有Integer元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37226278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档