Я хочу иметь возможность аннотировать класс списком двух типов аннотаций, которые связаны по функциям, но совершенно различаются по аргументам. Порядок этого списка имеет значение, хотя. Я уже пытался найти это, но не смог найти никаких ссылок на это (я не был уверен, как это назвать).
Edit:
Что я хочу сделать в итоге:
//place holder for example (Abstract)
public @interface A {
}
@Target(PARAMETER)
public @interface B extends A {
//Gets stuff
Class type();
int key();
}
@Target(PARAMETER)
public @interface FlaggedListOfA extends A {
//List of A
A[] set();
}
//Goal is to have annotation that does this
@Target(METHOD)
public @interface ImportantFunc {
A[] dataForA() default {};
String[] names();
int property() default 0;
//etc.
}
//End goal:
public class SomeImportantClass {
@ImportantFunc(dataForA = {@B(...), @B(...}, ...)
public void doStuff() {
}
//So I can have an end goal of this (Order matters, may contain repeats,
//and has unknown length!)
@ImportantFunc(dataForA = {@B(...), @FlaggedListOfA(@B(...), @B(...))}, ...)
public void doStuffB() {
}
@ImportantFunc(dataForA = {@FlaggedListOfA(@B(...)), @FlaggedListOfA(@B(...), @B(...))}, ...)
public void doStuffC() {
}
@ImportantFunc(dataForA = {@FlaggedListOfA(@B(...), @FlaggedListOfA(@B(...), @B(...))), @B(...)}, ...)
public void doStuffD() {
}
}
Размышления для получения всех использований ImportantFunc (например, 100 его использований) в пакете и использования этих данных для выбора, какую функцию использовать. Аннотация должна помочь с отражением, поскольку, как только он получает данные из @ImportantFunc, он затем преобразует их во входные данные для библиотеки, которая фактически выбирает, какую функцию выполнять (это внутреннее и не может быть изменено). Этого также можно добиться гораздо более длинными и раздражающими способами, но я надеялся использовать аннотации для упрощения процесса определения всех этих функций.
Изменить:
Другой способ решить эту проблему - найти способ сгруппировать две аннотации вместе.
Возможность сделать это не была бы полностью идеальной, но определенно сделала бы это гораздо более работоспособным:
public @interface Example {
AnyTypeOfAnnotation[] set();
}