Я хотел бы знать, есть ли способ создать общий интерфейс, который можно было бы реализовать со всеми классами, имеющими определенную аннотацию на уровне класса.
Например:
@XmlRootElement
public class Subscription { ... }
@XmlRootElement
public class Author { ... }
Я хотел бы создать общий интерфейс, применимый к этим двум классам (и многим другим). Есть ли способ добиться этого?
Ответ 1 · рейтинг 2 · biziclop
Интерфейсы и наследование используются для распространения функциональности "по вертикали", вниз по графу наследования.
Аннотации предназначены для дополнительных функций, которые можно прикрутить к классам, методам и т. д., и практически не связаны с интерфейсами.
Если вы заранее знаете, какими будут ваши классы и как они будут связаны друг с другом, вам, вероятно, вообще не нужны аннотации. Причина этого в том, что вы можете заставить их реализовывать интерфейсы маркеров (например, java.io.Serializable), которые практически аналогичны аннотациям уровня класса (без параметра), за исключением того, что с ними гораздо проще работать.
Ответ 2 · рейтинг 1 · Ralph
Это невозможно со стандартной Java, но вы можете использовать AspectJ Inter-Type. объявления типов.
Например, этот аспект добавит WhatEverInterface и реализацию к каждому классу, аннотированному @XmlRootElement.
public aspect MyAspect {
declare parents: (@XmlRootElement) implements WhatEverInterface;
public void WhatEverInterface.doSomething() {
System.out.println("something");
}
}