Невозможно создать аннотацию с несколькими связанными аргументами универсального класса
Я пытаюсь создать аннотацию, которая может принимать несколько классов в качестве входных данных. Типичное использование будет
@Prerequisites{FirstPrerequisite.class, SecondPrerequisite.class}
Для этого я могу создать аннотацию, как показано ниже
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface Prerequisites {
public Class<?>[] value();
}
Я хочу ограничить типы, которые разрешены в аннотации предварительных условий. Если я дам что-то вроде public Class<? extends Dependency>[] value();
Однако это работает, проблема в том, что My FirstPrerequisite и SecondsPrerequisite могут быть расширены из того же типа. Я пробовал следующее, но ни один из них не работал, они дают ошибки компиляции.
public Class<? extends Dependency & TestCaseStep>[] value();
public Class<? extends Dependency , TestCaseStep>[] value();
public Class<T extends Dependency & TestCaseStep>[] value();
Как привязать Generics к входам двух разных типов?
1 ответ
Один из вариантов - создать интерфейс маркера и заставить ваши классы реализовать интерфейс. Затем вы можете указать границы этого типа интерфейса.
Другая альтернатива - просто переместить проверку ограничений во время выполнения, а не во время компиляции. Ваш процессор аннотаций должен проверить Class
аргументы, которые были предоставлены.