Sprawdź atrybut podklasy
Natknąłem się na tę sytuację, ale nie wiem, jak sobie z tym poradzić:
class Myclass { }
class MyclassWithAwesomeStuff extends Myclass {
public boolean awesomeStuff;
}
Zapisuję obiekty Myclass w arraylistyce i iteracyjnie później przez tę listę:
for(Myclass m : list) {
//here I want to check if awesomeStuff is true, in case it is a MyclasswithAwesomeStuff
}
Problem polega na tym, że klasa macierzysta Myclass nie zna atrybutu awesomeStuff (i nie powinna, ponieważ jest to funkcja, która pochodzi tylko z klasą pochodną). Ale jak mogę sobie z tym poradzić? Problem polega na tym, że arrayylist zawiera elementy Myclass i MyclassWithAwesomeStuff, a pętla foreach rzuca je zawsze do Myclass.
Zastanawiam się, czy to jest awaria projektu?
//EDYTOWAĆ:
Dobra, aby moje pytanie było trochę bardziej namacalne, tutaj więcej informacji. Próbuję zbudować małą kawiarnię:
class Coffee { }
class CoffeeMix extends Coffee {
public boolean shaken;
}
Zapisuję elementy kawy na liście tablic:
ArrayList<Coffee> coffees = new ArrayList<Coffee>();
Na tej liście tablic znajdują się normalne obiekty kawowe i obiekty mieszanki kawy. Teraz chcę wyświetlić wszystkie obiekty mieszanki kawy, które są wstrząśnięte:
for(Coffee c : coffees) {
//here is the same problem as above
}
Jak widzę w odpowiedziach / komentarzach: instanceof wydaje się być złym pomysłem, ponieważ wkręca pomysł z oo i interfejs, który implementują obie klasy, to także zły pomysł, ponieważ normalnej kawy nie można wstrząsnąć. Więc jak sobie z tym poradzić?