Могу ли я сделать общий интерфейс для классов, которые имеют конкретную аннотацию? - PullRequest
0 голосов
/ 22 марта 2011

Я хотел бы знать, есть ли способ создать универсальный интерфейс, который может быть реализован со всеми классами, которые имеют конкретную аннотацию на уровне класса.Например:

@ XmlRootElementподписка на общедоступный класс {...}@XmlRootElementpublic class Author {...}

Я хотел бы создать общий интерфейс, который будет применим для этих двух классов (и не только).Есть ли способ добиться этого?

Ответы [ 3 ]

2 голосов
/ 22 марта 2011

Интерфейсы и наследование используются для распространения функциональности "по вертикали" вниз по графу наследования.

Аннотации предназначены для дополнительных функций, которые могут быть привязаны к классам, методам и т. Д. И практически не связаны с интерфейсами.

Если вы заранее знаете, какими будут ваши классы и как они будут связаны друг с другом, вам, вероятно, вообще не нужны аннотации.Причина этого заключается в том, что вы можете заставить их реализовывать интерфейсы маркеров (например, java.io.Serializable), которые практически совпадают с аннотациями на уровне класса (без параметра), за исключением того, что с ними гораздо проще работать.

1 голос
/ 22 марта 2011

Это невозможно в стандартной Java, но вы можете использовать AspectJ Inter-type объявления .

Например, этот аспект добавит WhatEverInterface и имплентацию к каждому классу, аннотированному с помощью@XmlRootElement.

public aspect MyAspect {
   declare parents: (@XmlRootElement) implements WhatEverInterface;

    public void WhatEverInterface.doSomething() {
       System.out.println("something");
    } 
}
0 голосов
/ 22 марта 2011

Это так просто:

interface XmlProcessor
{
    public void process(XmlRootElement root);
}
...