2015-05-23 2 views
0

Есть ли способ проверить достоверность аннотации в Java?Проверка аннотации (параметра) в Java?

Например я могу иметь аннотацию

public @interface Foo { 
    int number(); 
    String name(); 
} 

public @interface Foos { 
    Foo[] value(); 
    /* Foos() { 
     for(int i=0; i<value().length; ++i) { 
      if(i != value()[i].number()) { 
       throw new IllegalArgumentException(); 
      } 
     } 
    } */ 
} 

Могу ли я тягот, что numbers начинают с нуля и идти непрерывно?

(в примере выше я написал эту проверку в закомментированного конструктор аннотаций)

UPDATE

Некоторые образцы использования аннотаций:

// correctly annotated class 
@Foos({@Foo(number=0, name="first"), @Foo(number=1,name="second")}) 
class MyCorrectAnnotatedClass { 
} 

// incorrectly annotated class 1 
// number starts from 1 not form 0 
@Foos({@Foo(number=1, name="first"), @Foo(number=2,name="second")}) 
class MyIncorrectAnnotatedClass1 { 
} 

// incorrectly annotated class 2 
// number sequence has missed 1 
@Foos({@Foo(number=0, name="first"), @Foo(number=2,name="second")}) 
class MyIncorrectAnnotatedClass2 { 
} 

ответ

0

ли вы имеете в виду, что вы хотите проверить во всех местах, где используется аннотация, так что каждый номер используется ровно один раз, начиная с 0? Это невозможно в простой форме.

Если вы действительно хотите это сделать, вам придется написать код, который сканирует все классы в пути к классам, находит все классы, которые используют аннотацию, а затем проверяет значения аннотаций. (И если аннотация используется для методов или чего-то другого вместо классов, это еще сложнее).

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

+0

Хотя я имел в виду разные вещи, которые вы думали, но из вашего ответа, вероятно, приходит, что ответ «невозможно». См. Мое обновление, пожалуйста: я имел в виду целостность аннотации проверки в каждом отдельном использовании, а не во всех случаях использования. Поскольку аннотации, созданные как независимые субъекты, последнее желание было бы незаконным. –

Смежные вопросы