Le code suivant:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
se compile sans erreurs dans JDK 8 (en utilisant -source 1.6), mais échoue dans JDK 6 avec le message d'erreur:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Bien que je comprenne de quoi s'agit l'erreur, pourquoi cela se compile-t-il avec JDK 8? Est-ce documenté quelque part?
value = value + suffix
est totalement légale quel que soit le type de valeur. Il me semble donc que celavalue += suffix
devrait aussi être légal.Réponses:
JLS 15.26.2. Les opérateurs d'affectation composée déclarent :
Cette phrase est la même de Java 6 à Java 14 , et n'a probablement jamais changé depuis le début de Java.
C'est
value += suffix
la même chose quevalue = (Object) (value + suffix)
Le compilateur Java 6 n'aurait pas dû échouer à compiler cette instruction.
la source
value = (Object) (value + suffix)
devrait être compilée.