2016-01-27 2 views
1

Я пытаюсь определить абстрактный класс, который принимает список вещей и делает вещи. Что-то вроде:Java абстрактный класс с общими списками

abstract public class AbstractClass { 
    private final List<?> list; 

    public AbstractClass(List<?> list) { 
     this.list = list; 
    } 

    public List<?> getList() { return list; } 
    abstract void addToList(List<?> list); 
} 

public class Class1 extends AbstractClass { 
    public Class1(List<Integer> list) { 
     super(list); 
    } 

    @Override 
    void addToList(List<Integer> list) { 
     // do stuff 
    } 
} 

public class Class2 extends AbstractClass { 
    public Class2(List<String> list) { 
     super(list); 
    } 

    @Override 
    void addToList(List<String> list) { 
     // do stuff 
    } 
} 


List<Integer> a = new List<Integer>(); 
Class1 c1 = new Class1(a); 
List<Integer> b = c1.getList(); 
c1.addToList(a); 

List<String> c = new List<String>(); 
Class2 c2 = new Class2(c); 
List<Integer> d = c2.getList(); 
c2.addToList(c); 

addToList Имея с определенными типами в подклассах порождают ошибки, но я не знаю, если это вопрос синтаксиса (с моим плохим знанием дженерик) или то, что я пытаюсь сделать (возможно ли перегрузить абстрактный метод)?

ответ

5

Вы должны сделать AbstractClassa typed class вместо использования шаблона ?.

abstract public class AbstractClass<T> { 
    private final List<T> list; 

    public AbstractClass(List<T> list) { 
     this.list = list; 
    } 

    public List<T> getList() { return list; } 
    abstract void addToList(List<T> list); 
} 

В этом случае, вы бы

public class Class1 extends AbstractClass<Integer> { ... } 
public class Class2 extends AbstractClass<String> { ... } 

 Смежные вопросы

  • Нет связанных вопросов^_^