У меня есть аннотация, которую я пытаюсь определить, которая принимает параметр Class. Я хотел бы убедиться, что предоставленный класс расширяет определенный интерфейс. Итак, я придумал ...
public @interface Tag {
Class<? extends ITagStyle> style() default NoStyle.class
}
public class NoStyle implements ITagStyle {
...
}
Однако я получаю ошибку компиляции "несовместимых типов".
Я предполагаю, что это потому, что NoStyle.class
возвращает Class
вместо Class<NoStyle>
. В JLS для Java SE 5 & 7 (не удалось найти 6, я использую 6) конкретно говорится, что "void.class" вернет "Class". СМ. Литералы класса JLS: http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.8.2
Есть ли способ сделать это во время компиляции? Если нет, то я предполагаю, что обходной путь должен проверять значение стиля во время выполнения, чтобы убедиться, что оно расширяет ITagStyle: '(
РЕШЕНИЕ: В JDeveloper есть ошибка в компиляторе "в процессе". Проверка "вне процесса" или использование JDK7u3 исправляет ошибку компиляции.