Angenommen, ich modelliere verschiedene Tiere in Java. Jedes Tier hat eine Kombination dieser Fähigkeiten: gehen, schwimmen und fliegen. Im Beispiel ist die Fähigkeitsmenge konstant.In Java, sollte ich Getter oder Interface-Tagging für konstante Eigenschaften verwenden?
Ich kann diese Informationen als Getter speichern, die Konstanten zurückgeben. Zum Beispiel:
public class Penguin implements Animal {
public boolean canWalk() {
return true;
}
public boolean canSwim() {
return true;
}
public boolean canFly() {
return false;
}
// implementation...
}
Die Laufzeitprüfung ist dann:
if (animal.canFly()) {
// Fly!
}
Oder kann ich "Tagging" verwenden Schnittstellen:
public class Penguin implements Animal, Flyer, Swimmer {
// implementation...
}
Die Laufzeitprüfung ist dann:
if (animal instanceof Flyer) {
// Fly!
}
Was sind die Vor- und Nachteile von jeder Ansatz?
Sie benötigen einen Parameter für eine Annotationsschnittstelle, damit er zur Laufzeit verfügbar ist. – Dariusz
@Dariusz Guter Fang! Bearbeitet. – sh0rug0ru
Es ist ein häufiges Missverständnis, dass Annotationen ein Ersatz für Marker-Interfaces sind. _Effective Java Item # 37: Verwenden Sie Marker-Interfaces, um types_ zu definieren, und weisen Sie auf die Vorteile von Marker-Interfaces gegenüber Annotationen hin. – jaco0646