Используя буквальное значение класса по умолчанию в аннотации

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

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

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

}

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

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

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

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

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

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

6
задан skaffman 24 August 2010 в 15:47
поделиться