Java:集合

Java:集合,java,list,arraylist,Java,List,Arraylist,我正在创建一个具有ArrayList的类,因此当我调用构造函数时,它会初始化该数组: public class ElementsList<E> { private ArrayList<E> list; public ElementsList() { list = new ArrayList<E>; } } 公共类元素列表 { 私有数组列表; 公共元素列表() { 列表=新的ArrayList; } } 我不

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

public class ElementsList<E>
{
    private ArrayList<E> list;

    public ElementsList()
    {
        list = new ArrayList<E>;
    }
}
公共类元素列表
{
私有数组列表;
公共元素列表()
{
列表=新的ArrayList;
}
}
我不明白为什么在创建构造函数时,不必提及这个类将保留某些元素的事实。我的意思是你不必这么做:

public ElementsList<E>{

  list = new ArrayList<E>;
}
公共元素列表{
列表=新的ArrayList;
}

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

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

ElementsList<Integer> e = new ElementsList<>();
elementsliste=newelementslist();

现在我知道我的列表中有整数元素。

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

ElementsList<Integer> e = new ElementsList<>();
elementsliste=newelementslist();

现在我知道我有一个包含整数元素的列表。

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

也就是说,你已经申报了你的班级

public class ElementsList<E> {

将有效地表示与类的元素类型无关的另一种类型。

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

也就是说,你已经申报了你的班级

public class ElementsList<E> {

将有效地表示与你的类元素类型无关的另一种类型。

请考虑重新编辑它,因为我做了一些编辑。原来我不太清楚,我注意到了。我也回答了这个问题:既然我做了一些编辑,请考虑重新阅读。原来我不太清楚,我注意到了。我也回答过:)