I have class structure where
public abstract class AbstractBuilding
implements some non-relevant interfaces for this question.public abstract class AbstractAnimalBuilding extends AbstractBuiling
And small number of classes following this structure:public class AnimalBuildingA extends AbstractAnimalBuilding
public class AnimalBuildingB extends AbstractAnimalBuilding
public class AnimalBuildingC extends AbstractAnimalBuilding
public class AnimalBuildingD extends AbstractAnimalBuilding
In a totally separate class I have the following method:
@FXML
private Button btnAnimalBuildingA;
@FXML
private Button btnAnimalBuildingB;
@FXML
private Button btnAnimalBuildingC;
@FXML
private Button btnAnimalBuildingD;
for (AbstractAnimalBuilding animalBuilding: animalBuildings){
if (animalBuilding instanceof AnimalBuildingA) {
changeButtonDisplay(btnAnimalBuildingA)
} else if (animalBuilding instanceof AnimalBuildingB){
changeButtonDisplay(btnAnimalBuildingB)
} else if (animalBuilding instanceof AnimalBuildingC) {
changeButtonDisplay(btnAnimalBuildingC)
} else if (animalBuilding instanceof AnimalBuildingD){
changeButtonDisplay(btnAnimalBuildingD)
//Do something specific here
}
}
private void changeButtonDisplay(Button buttonToChange){
button.setVisible(true);
}
Where animalBuildings
is a Set<AbstractAnimalBuilding>
containing any combination of AnimalBuildingX
's.
Assuming the structure at the top needs to be kept (eg, AnimalBuildingX
HAS to extend AbstractAnimalBuilding
), what would be a better approach than the multiple if-then-else
statements in determining what kind of building animalBuilding
is?
Would it feasible to simply create a new Interface
as outlined in this question and have each AnimalBuildingX
implement
it while still extending AbstractAnimalBuilding
or is there a way I can do it using the structure I currently have.