Как создать аннотацию Java, содержащую массив неизвестных перечислений?

Аннотации, которые я пытаюсь сделать, выглядят примерно так:

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.FIELD })
public @interface EnumParameter { Enum<!--?-->[] disallowedValues() default {};
}

Тем не менее, я получаю следующую ошибку: "Недопустимый тип Enum [] для атрибута аннотации EnumParameter.disallowedValues, только примитивный тип, String, Class, аннотация, перечисление разрешены или 1-мерные массивы" об этом ". Я намерен использовать это, чтобы указать, что некоторые значения в перечислении недействительны для этого поля. Я не знаю тип, потому что я намерен использовать его для дополнения создания пользовательского интерфейса, и таким образом можно было бы встретить любой тип перечисления.

для уточнения.

Скажем, у меня есть перечисление,

enum Direction{ LEFT, RIGHT, BOTH;
}

и у меня есть поле,

Direction turnSignal;

Я хотел бы указать, что сигнал поворота не может иметь ОБА.

@EnumParameter(disallowedValues = {Direction.BOTH})
Direction turnSignal;

Мне стало известно о том, что на данный момент это кажется невозможным. Есть ли причина, по которой это было запрещено? Считается ли это плохим стилем использование enum таким образом?

1 ответ

Будет что-то вроде этой работы:

@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation { Class<!--? extends Enum<?-->> enumClass(); String[] disallowedValues();
}

Используется как

@MyAnnotation(enumClass = Direction.class, disallowedValues = {"LEFT", "RIGHT"})
Direction turnSignal;

licensed under cc by-sa 3.0 with attribution.