2013-06-26 5 views
0

У меня есть 4 класса (B, C, D, E), которые расширяют один класс (A), я пытаюсь создать общий List<? extends A>, чтобы добавить объекты одного из классов (B, C, D, E). Я могу сделать это без проблем. Проблема в том, что я не могу получить доступ к методам классов (B, C, D, E). Есть ли другой способ сделать это?Список <? extends A> доступ к методам расширенных классов

Часть коды

public class A{ 
    protected int id; 

    public void setId(int id){} 
    public int getId(){} 
} 

public class B extends A{ 
    private name; 

    public void setName(String name){} 
    public void getName(){} 
} 

public class Generic{ 
    List<? extends A> myList; 

    public List<? extends A> getMyList(){} 
    public void setList(ArrayList<? extends A> MyList){} 
} 

И это то, что я делаю.

Generic myObject = new myList<B>; 
myObject.getMyList().get(counter).getId(); 

Код выше работает отлично, что я хочу сделать, но я не могу его видеть ниже.

myObject.getMyList().get(counter).getName(); 
+0

Где вы пытаетесь получить доступ к методам? –

+6

Можете ли вы использовать полиморфизм? Я имею в виду использование абстрактного метода в 'A' и' @ Override' в подклассах? Если вы сохраняете объекты в коллекции, то вы должны относиться к ним равномерно. Конечно, есть особые случаи, когда вам действительно нужно то, чего вы пытаетесь достичь, но особый случай особый. Думайте лучше о своем дизайне :) –

+3

Я не верю, что вы можете добавлять объекты в список типов 'List ' без проблем. Пожалуйста, покажите нам свой код. ;) –

ответ

0

Тя несколько возможностей:

  1. переместить определения метода в базовом классе (как абстрактные методы)
  2. Проверка с экземпляром для конкретного класса и отлитые соответственно
  3. Определить методы в интерфейсах (один для метода x, один для метода Y и т. д.) и использовать цифру «&»: List<? extends A & Y & Z > (здесь здесь находятся интерфейсы Y и Z)
0

Кто-то отправил код выше, а затем удалил его.

public class Generic<T extends A> { 
    List<T> myList; 

    public List<T> getMyList(){} 
    public void setList(ArrayList<T> MyList){} 
} 

Это решило мою проблему, спасибо!

+0

Как это решить проблему вашего подкласса? –

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