Ссылка на любой из подклассов конкретного суперкласса в Java - PullRequest
1 голос
/ 05 сентября 2011

Хорошо, ребята, вот простой вопрос, который я не мог понять самостоятельно. Любая помощь с благодарностью!

  • Допустим, у меня есть абстрактный класс Superclass, из которого я получил подклассы Subclass1 и Subclass2.
  • Допустим, у меня есть еще один myClass класс, с полем myField. Я хотел бы указать, что Тип myField должен быть списком фиксированного подкласса Superclass, т.е. List<Subclass1> или List<Subclass2>.

Как набрать myField? List<Superclass> не работает, поскольку такой список теоретически может содержать комбинацию Subclass1 и Subclass2 объектов .. Я действительно ищу здесь что-то вроде List<subclass(Superclass)>. Это вообще существует? Как бы вы поступили об этом?

Опять же, большое спасибо за помощь!

Гийом

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

Вам нужно использовать дженерики.

class MyClass<S extends SuperClass> {
  private List<S> myField;
  ...
}

Надеюсь, это поможет.

1 голос
/ 05 сентября 2011

Вы можете использовать ограниченный шаблон :

class MyClass {
    List<? extends Superclass> myField;
}

Если вы сделаете это таким образом, вы не сможете вызывать такие методы, как add для myField (ну, вы, но вы можете передать только null.

Альтернативой является универсальный класс:

class MyClass<T extends Superclass> {
    List<T> myField;
}
0 голосов
/ 05 сентября 2011

То, что вы ищете, на самом деле - проверка во время выполнения, вы можете объявить myField как

private List<Superclass> myField

и иметь установщик для проверки времени выполнения;

public addMyField(Superclass field){

   if (field instanceof Subclass1 || field instanceof Subclass1){
     myField.add(field);
   }
}
...