Мой Parent
класс как это:Как избежать отливку поля родителя в подклассах
public abstract class Parent{
protected HashMap<String, Foo> field;
public abstract void method1();
}
Теперь, двое детей Parent
класса нужно перебирать HashMap
, чтобы сделать что-то. Первому ребенку нужен класс Foo
, поэтому проблем нет. Второго ребенка, хотя, имеет method1()
реализован так:
@Override
public void method1(){
for(Foo i : this.field.values(){
((Bar) i).specificMethod();
/* other code */
}
}
с Bar
, которая простирается Foo
, конечно. Как вы можете видеть, литье является обязательным для использования конкретного метода класса Bar
. Можно ли это избежать? Я знаю, что я мог бы использовать Generics в Parent
классе, как это:
public abstract class Parent<T extends Foo>{
protected HashMap<String, T> field;
/* etc. */
}
, но я не знаю, если это считается плохим поведением.
Объявление карты как «Карта'?, Если она содержит 'Bar' любыми способами. –
Ваш общий подход, 'class Parent', это нормально. В ответе Прашанта есть еще один вариант. Я сразу же предпочел бы дженерики, но вы можете лучше взвесить плюсы и минусы. –