Vous pouvez avec le code généré dynamiquement. par exemple. Utilisation de l'API du compilateur J'ai écrit un wrapper pour cette API afin que vous puissiez compiler des classes en mémoire. Voir le code ci-dessous. Le problème que vous avez est qu'il n'est pas très utile car vous ne pouvez pas utiliser ces valeurs, sauf dans les classes qui ont été compilées APRÈS la compilation de votre énumération. Vous pouvez utiliser Enum.valueOf() etc. Mais une grande partie de la valeur d'enums est perdue.
Comme d'autres l'ont suggéré, l'utilisation d'une carte serait plus simple et donnerait le même avantage. Je n'utiliserais l'enum si vous avez une bibliothèque doit être passé un Enum. (Ou plan code plus généré)
public static Class generateEnum(String className, List<String> enums) {
StringBuilder code = new StringBuilder();
code.append("package enums; public enum enums." + className + " {\n");
for (String s : enums)
code.append("\t"+s+",\n");
code.append("}");
return CompilerUtils.CACHED_COMPILER
.loadFromJava("enums."+className, code.toString());
}
L'une des choses que je trouve utile avec le texte code généré est que vous pouvez l'écrire dans un fichier et le déboguer même au moment de l'exécution. (La bibliothèque supporte cela) Si vous générez du code octet, il est plus difficile à déboguer.
La bibliothèque s'appelle Essence JCF. (Et cela ne nécessite pas de chargeur de classe personnalisé)
Je ne crois pas que cela puisse être fait. Nous verrons si quelqu'un d'autre sait mieux que moi. – duffymo
Pourquoi? Vous avez la réponse à la question que vous avez réellement posée ci-dessous (deux choix, essentiellement: «non» et «oui, mais c'est difficile et je ne peux pas imaginer pourquoi vous voudriez»). Mais vous pourriez envisager de poster une nouvelle question décrivant le problème que vous tentez de résoudre - vous obtiendrez probablement des suggestions utiles sur la façon de l'aborder (il ne s'agit presque certainement pas de générer une énumération au moment de l'exécution). –
@ T.J. Crowder, c'est par curiosité. Je veux mieux connaître Java et ses limites. – Russell