Constante et Compilateur Java
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]
Code:
public final String CONST_1 = "MASTRONG"
]
Soit B une classe qui se sert de la constante CONST_1 dans un JAR2. [module 2 maven]
Code:
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.
Code:
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 :
Code:
1 2 3 4 5 6
|
Le code compilé [puis décompilé] pour la classe B me donne ceci pour ma string MA_LOCAL_CONST
<div class="bbcode_container">
<div class="bbcode_description">Code:</div>
<hr /><code class="bbcode_code">MA_LOCAL_CONST = <span class="br0">(</span><span style="color: #0000ff;">new</span> StringBuilder<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>.append<span class="br0">(</span><span style="color: #FF0000;">"MASTRONG"</span><span class="br0">)</span>.append<span class="br0">(</span><span style="color: #FF0000;">"-LOCAL"</span><span class="br0">)</span>.toString<span class="br0">(</span><span class="br0">)</span>;</code><hr />
</div> |
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