2017-02-11 27 views
0

我想扩展ArrayList <>Java - 如何扩展ArrayList <class>?我不能得到我定义的getter

正如你在下面的例子中看到的,我只添加了一个属性(TypeFactory)。

public class ElementList<E> extends ArrayList<E> 
{ 
    // Attribute 
    private TypeFactory typeFactory; 

    // Getter/Setter 
    public TypeFactory getTypeFactory() { 
     return typeFactory; 
    } 

    public void setTypeFactory(TypeFactory typeFactory) { 
     this.typeFactory = typeFactory; 
    } 

    // Constructor 
    public ElementList(TypeFactory typeFactory) 
    { 
     super(); 
     this.typeFactory = typeFactory; 
    } 
} 

我的问题是,我的IDE(在我的情况的IntelliJ)没有找到getTypeFactory()getter方法,并创建一个新的元素列表对象后,显示为红色文本(如错误)。

List<Element> stockOfTire = new ElementList<Element>(TypeFactory.Tire); 
stockOfTire.getTypeFactory(); 

我的声明有问题吗?

+1

为什么?你为什么想这样做? [优先使用继承的组合](https://en.wikipedia.org/wiki/Composition_over_inheritance)。 _Compose_ data,_inherit_行为。 –

+0

'stockOfTire'变量的类型是List 。此类型中不存在getTypeFactory()。如果您需要访问此方法,则必须使用ElementList 类型声明该变量。请注意,扩展ArrayList,在99.99%的情况下,是一个坏主意。请考虑使用TypeFactory和List字段创建一个类,并将其委托给包装列表。 –

+0

我不明白为什么我可以做'列表 var = new ArrayList ();'为什么当用一个子类代替** ArrayList **时不工作。 – ManWithNoName

回答

2

因为List<Element>没有这样的功能,只有ElementList<Element>有。将您的代码更改为:

ElementList<Element> stockOfTire = new ElementList<Element>(TypeFactory.Tire); 
stockOfTire.getTypeFactory(); 
相关问题