Dans mon projet, j'ai défini l'une annotation similaire à ce qui suit:
(Omettre @Retention
, @Target
par souci de concision)Java Annotation Overloading?
public @interface DecaysTo {
String[] value();
}
Depuis l'écriture à l'origine il, nos besoins ont changé et j'ai maintenant défini un ENUM que je veux être en mesure d'utiliser à la place de la chaîne:
public enum Particle {
ELECTRON,
ANTIELECTRON,
NEUTRINO,
ANTINEUTRINO,
...
}
pour éviter la mise à jour tous les cas de cette annotation, je voudrais être en mesure de construire l'annotation avec soit a String
ou un membre de enum Particle
sans devoir mettre à jour chaque instance de cette annotation pour spécifier l'attribut. Cependant, puisque nous définissons les attributs de l'annotation, et non les constructeurs, il semble impossible de la surcharger.
// 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, ...})
également essayé:
public @interface DecaysTo {
Object[] value();
}
Y at-il une façon de faire qui n'implique pas retourner à travers et l'édition d'une énorme quantité de code?
À quoi ressemblerait cette méthode de conversion? Voulez-vous dire faire un proxy dynamique vous-même, ou quelque chose d'autre? – Yishai