2010-08-24 2 views
6

Я хочу комментировать некоторые поля данного класса компонента со следующей аннотацией:Использование буквального значения класса по умолчанию аннотацию

@Target({FIELD}) 
@Retention(RUNTIME) 
public @interface Process { 

    Class<? extends ProcessingStrategy> using() default DefaultImplStrategy.class; 

} 

Не вдаваясь в области слишком много, каждый аннотированный свойство должно имеют определенную на нем ProcessStrategy, следовательно, свойство use() в аннотации. Это прекрасно и работает так, как мне хотелось бы.

Я также хочу указать реализацию стратегии по умолчанию, которая будет использоваться большую часть времени (по умолчанию определено ниже). Это отлично работает в Eclipse.

Однако, когда я пытаюсь скомпилировать это с помощью обычного JDK (вызывается через Maven), я получаю следующее сообщение об ошибке:

found : java.lang.Class<DefaultImplStrategy> 
required: java.lang.Class<? extends ProcessingStrategy> 

Я предполагаю, что это какая-то комбинация дженериков, аннотации, класс литералов и недобросовестный которые виноваты здесь, но я честно не знаю почему. Я просмотрел правила, связанные с значениями по умолчанию в JLS, и я, кажется, ничего не нарушаю.

Учитывая, что DefaultImplStrategy определенно реализует ProcessingStrategy, что я делаю неправильно здесь?

+0

Что такое JDK версия? –

+0

Это jdk 1.6.0_16 – GaryF

+0

В IntelliJ с jdk1.5.0_19 он компилируется отлично. –

ответ

3

Короткий вариант этого состоит в том, что некоторая комбинация maven, Lombok и аннотаций по умолчанию не играет хорошо вместе. Более длинная версия - on the Lombok mailing list.

Решение относительно проста: полностью определить тип по умолчанию т.е.

@Target({FIELD}) 
@Retention(RUNTIME) 
public @interface Process { 

    Class<? extends ProcessingStrategy> using() default com.example.processing.DefaultImplStrategy.class; 

} 
+0

Это также происходит в моем проекте, основанном на муравьях, который не использует Lombok, поэтому это должно быть проблемой с самим jdk – Aldo

+0

@ Aldo, в то время как мне это не нужно сейчас (за пределами обходного пути), я бы любите слышать, в чем проблема, если вы это понимаете. – GaryF

0

Не знаю почему, но если вы даете полный путь к классу, чтобы DefaultImplStrategy это вероятно, будет работать

+0

Умм, да. Это именно то, что я сказал в своем ответе на этот (мой собственный) вопрос. – GaryF

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