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?
Supongo que el valor no tiene que ser String. Si el valor es un entero, no tiene sentido agregarle una cadena. Tal vez puedas intentar convertir el valor en una cadena
—
fedoraHacker
@fedoraHacker La expresión
—
Grodriguez
value = value + suffix
es completamente legal independientemente del tipo de valor. Por lo tanto, me parece que también value += suffix
debería ser legal.
wow, no tenía idea. Pensé que el objetivo de diferentes objetos era definir reglas para lo que los datos pueden y no pueden hacer. El objetivo de tener diferentes tipos de datos y objetos es segregar la responsabilidad para asegurarse de que los tipos hagan una cosa, pero lo hagan bien. Estoy desconcertado de que pueda mezclar tipos de datos como ese. Bueno, aprendes algo todos los días :) y Value = value + suffix es exactamente igual que value + = suffix, así que no cuestiono la sintaxis en absoluto
—
fedoraHacker
Sí, pero el tipo de cadena es algo especial. El operador + aquí es el "operador de concatenación de cadenas"; si solo uno de los operandos es una cadena, el otro se convierte en una cadena antes de evaluar la expresión. Vea esta sección de JLS .
—
Grodriguez
Ah, ya veo, no sabía que la cadena lo convertía así. ¡Gracias por tomarse el tiempo de responder incluso después de que la pregunta haya sido respondida!
—
fedoraHacker