O código a seguir:
void someMethod(Object value)
{
String suffix = getSuffix();
if (suffix != null)
value += suffix;
[...]
}
compila sem erros no JDK 8 (usando -source 1.6), mas falha no JDK 6 com a mensagem de erro:
Operator '+' cannot be applied to java.lang.Object and java.lang.String
Embora eu entenda do que se trata o erro, por que isso é compilado com o JDK 8? Isso está documentado em algum lugar?
value = value + suffix
é completamente legal, independentemente do tipo de valor. Parece-mevalue += suffix
que também deveria ser legal.Respostas:
JLS 15.26.2. Os operadores de atribuição composta declaram:
Essa frase é a mesma do Java 6 para o Java 14 e provavelmente nunca mudou desde o início do Java.
Então
value += suffix
é o mesmo quevalue = (Object) (value + suffix)
O compilador Java 6 não deveria ter falhado ao compilar essa instrução.
fonte
value = (Object) (value + suffix)
deve compilar.