Проверьте атрибут подкласса
Я наткнулся на эту ситуацию, но я не знаю, как справиться с этим правильно:
class Myclass { }
class MyclassWithAwesomeStuff extends Myclass {
public boolean awesomeStuff;
}
Я сохраняю объекты Myclass в arraylist и повторяю позже по этому списку:
for(Myclass m : list) {
//here I want to check if awesomeStuff is true, in case it is a MyclasswithAwesomeStuff
}
Проблема здесь в том, что родительский класс Myclass не знает атрибута awesomeStuff (и не должен, потому что это функция, которая поставляется только с производным классом). Но как я могу справиться с этим? Проблема в том, что массив содержит элементы Myclass и MyclassWithAwesomeStuff, и цикл foreach всегда приводит их к Myclass.
Интересно, это провал проекта?
//РЕДАКТИРОВАТЬ:
Хорошо, чтобы сделать мой вопрос немного более осязаемым, здесь больше информации. Я пытаюсь построить небольшую кофейню:
class Coffee { }
class CoffeeMix extends Coffee {
public boolean shaken;
}
Я сохраняю элементы кофе в списке массивов:
ArrayList<Coffee> coffees = new ArrayList<Coffee>();
Таким образом, в этом списке массивов есть обычные объекты кофе и объекты кофейной смеси. Теперь я хочу отобразить все объекты кофейной смеси, которые потрясены:
for(Coffee c : coffees) {
//here is the same problem as above
}
Как я могу видеть из ответов / комментариев: instanceof кажется плохой идеей, потому что он порождает идею, лежащую в основе oo up, и интерфейс, который реализуют оба класса, тоже плохая идея, потому что нормальный кофе не может быть потрясен. Так как с этим справиться?