Bonjour, je viens de remarquer quelquechose que je trouve surprenant avec le compilateur java d'oracle.
Je m'explique :
Soit A une classe statique qui définie une constante CONST_1 dans un jar JAR1. [module 1 maven]
public final String CONST_1 = "MASTRONG"
]
Soit B une classe qui se sert de la constante CONST_1 dans un JAR2. [module 2 maven]
private final String MA_LOCAL_CONST = CONST_1 + "-LOCAL"
]
Aujourd'hui je dois faire une modification car CONST_1 est mal écrite.
Je change la valeur de CONST_1 dans JAR1.
public final String CONST_1 = "MASTRING"
]
et je re-déploie JAR1 sans toucher au reste (ça me semblait logique).
La modification n'est pas prise en compte par mon JAR2 (bizarre).
J'ai donc été décompilé ma class B de mon JAR2 pour comprendre.
et voici le résultat :
1 2 3 4 5 6 7 8 9
|
Le code compilé [puis décompilé] pour la classe B me donne ceci pour ma string MA_LOCAL_CONST
MA_LOCAL_CONST = (new StringBuilder()).append("MASTRONG").append("-LOCAL").toString();
|
Le comportement me parait logique quand on a les 2 classes dans le même jar [module maven]. Mais quand on en a plusieurs, je trouve cela plus que surprenant. Si je dois toujours tout recompiler à chaque fois que je modifie un truc ça devient l'enfer [et l'interet de sortir les constantes ?]. Quelqu'un pourrait-il m'expliquer la raison de cette "optimisation" ?
D'où voici ma question, y'aurait-il une possibilité pour que le compilateur garde la constante et ne copie pas la valeur ?
Merci
Partager