В моем проекте я определил аннотацию, аналогичную следующей:
(для краткости * пропущено @Retention
, @Target
)
public @interface DecaysTo {
String[] value();
}
С момента первоначального написания этого наши потребностиизменился, и теперь я определил перечисление, которое я хочу использовать вместо строки:
public enum Particle {
ELECTRON,
ANTIELECTRON,
NEUTRINO,
ANTINEUTRINO,
...
}
Чтобы избежать обновления каждого экземпляра этой аннотации, я хотел бы иметь возможность создавать аннотациюс либо a String
или членом enum Particle
без необходимости обновлять каждый экземпляр этой аннотации для указания атрибута.Однако, поскольку мы определяем атрибуты аннотации, а не конструкторы, представляется невозможным перегрузить ее.
// In a perfect world, either of these would work ...
public @interface DecaysTo {
String[] value();
Particle[] value();
}
@DecaysTo({"Electron", ...})
@DecaysTo({Particle.ELECTRON, ...})
// without having to explicitly specify which attribute to set:
public @interface DecaysTo {
String[] stringVals();
Particle[] enumVals();
}
@DecaysTo(stringVals = {"Electron", ...})
@DecaysTo(enumVals = {Particle.ELECTRON, ...})
Также предпринята попытка:
public @interface DecaysTo {
Object[] value();
}
Есть ли любой способ сделать это, не требующий возврата и редактирования огромного количества кода?