2017-02-11 13 views
0

Я хотел бы продлить ArrayList <> ClassJava - Как расширить ArrayList <class>? Я не могу получить определенный поглотитель

Как вы можете видеть в примере ниже, я только добавил один атрибут (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() и появляется красный текст (как ошибка) после создания нового Elementlist объекта.

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

Есть ли проблемы с моей декларацией?

+1

Почему? почему ты хочешь сделать это? [Предпочитает композицию над наследованием] (https://en.wikipedia.org/wiki/Composition_over_inheritance). _Compose_ данные, _inherit_ поведение. –

+0

Тип переменной 'stockOfTire' - это список . В этом типе нет 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();