Je suis en train de développer une vaste hiérarchie de classes Java, dont certaines ont une propriété particulière que je souhaite interroger au moment de l'exécution (la propriété ne s'applique qu'aux classes, pas aux instances spécifiques).
Je pourrais créer une méthode booléenne abstraite isFooBar()
que les sous-classes peuvent mettre en œuvre pour indiquer si la propriété est présente ou non :
public abstract class MyBaseClass {
...
public abstract boolean isFooBar();
}
Ou alors, je pourrais utiliser une interface de marquage. FooBarProperty
et faire un instanceof
de la vérification de l'interface :
public class MyConcreteClass extends MyBaseClass implements FooBarProperty {
...
}
Vous pouvez également utiliser une annotation, comme le suggère AmitD :
@FooBarAnnotation
public class MyConcreteClass extends MyBaseClass {
...
}
Quels sont les avantages et les inconvénients de chaque méthode, et laquelle devrait normalement être privilégiée ?