Я хочу комментировать некоторые поля данного класса компонента со следующей аннотацией:Использование буквального значения класса по умолчанию аннотацию
@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, что я делаю неправильно здесь?
Что такое JDK версия? –
Это jdk 1.6.0_16 – GaryF
В IntelliJ с jdk1.5.0_19 он компилируется отлично. –