El siguiente código:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
compila sin errores en JDK 8 (usando -source 1.6), pero falla en JDK 6 con el mensaje de error:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Si bien entiendo de qué se trata el error, ¿por qué esto se compila con JDK 8? ¿Está documentado en alguna parte?
value = value + suffix
es completamente legal independientemente del tipo de valor. Por lo tanto, me parece que tambiénvalue += suffix
debería ser legal.Respuestas:
JLS 15.26.2. Los operadores de asignación compuesta declaran :
Esa oración es la misma desde Java 6 hasta Java 14 , y probablemente nunca ha cambiado desde el comienzo de Java.
Entonces
value += suffix
es lo mismo quevalue = (Object) (value + suffix)
El compilador de Java 6 no debería haber fallado al compilar esa declaración.
fuente
value = (Object) (value + suffix)
debe compilarse la declaración equivalente de .