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?
Eu acho que o valor não precisa ser String. Se value for um Inteiro, então não faz sentido adicionar uma string a ele. Talvez você possa tentar converter valor para string
—
fedoraHacker
@fedoraHacker A expressão
—
Grodriguez 15/04
value = value + suffix
é completamente legal, independentemente do tipo de valor. Parece-me value += suffix
que também deveria ser legal.
uau, eu não tinha ideia. Eu pensei que o objetivo de diferentes objetos era definir regras para o que os dados podem e não podem fazer. O objetivo de ter tipos de dados e objetos diferentes é segregar a responsabilidade para garantir que os tipos façam uma coisa, mas façam bem. Estou confuso que você possa misturar tipos de dados como esse. Bem, você aprende algo todos os dias :) e Valor = valor + sufixo é exatamente o mesmo que valor + = sufixo, então eu não
—
discuto
Sim, mas o tipo String é um pouco especial. O operador + aqui é o "operador de concatenação de cadeias"; se apenas um dos operandos for uma sequência, o outro será convertido em uma sequência antes que a expressão seja avaliada. Veja esta seção do JLS .
—
Grodriguez 15/04
Ah, entendo, não sabia que a string era convertida assim. Obrigado por reservar um tempo para responder, mesmo depois que a pergunta for respondida!
—
fedoraHacker 15/04