我正在创建一个具有ArrayList的类,因此当我调用构造函数时,它会初始化该数组:
public class ElementsList<E>
{
private ArrayList<E> list;
public ElementsList()
{
list = new ArrayList<E>;
}
}我不明白为什么当你创建构造器时,你真的不需要提到这个类将保留某些元素的事实。我的意思是你不需要这样做:
public ElementsList<E>{
list = new ArrayList<E>;
}长话短说:为什么类名是ElementsList<E>,而构造函数没有<E>部分?
发布于 2016-05-14 20:08:08
在构造函数声明中,您不需要再次提到元素类型E,因为您已经在类声明级别上这样做了。
例如,您已经声明了您的类
public class ElementsList<E> {所以标识符E已经表示了您的元素类型。
将构造函数编写为
public <E> ElementsList() {...}将有效地表示独立于您的类的元素类型的另一种类型。
发布于 2016-05-14 19:54:21
你的列表不是最终的。如果是,那么您将能够强制初始化。但是,如果您在代码中使用此列表,IDE将会警告您此参数可能尚未初始化。此外,您还使用了新关键字。即使构造函数中不需要任何参数,也必须指定()。这就是new关键字在构造器中创建单个实例的工作方式。例如,对于数组,您不需要这样做。如果你不想使用新的,你有几个选择。看看这一页。Design patterns。对于本例,我认为您正在寻找的是一种工厂模式。而且,如果您查看您的类声明,您指定的是一个泛型类型E。这个类已经知道类型E是什么。如果你想用另一种类型做一个构造器,那就没有意义了。这就是为什么在类的声明中指定它就足够了。一旦你的元素被创建,E将是一个已知类型。例如,如果我想要一个处理Integer类型的元素:
ElementsList<Integer> e = new ElementsList<>();现在我知道我的list里面有Integer元素。
https://stackoverflow.com/questions/37226278
复制相似问题