No siempre implica la compatibilidad fuente de compatibilidad binaria?

Balz GUENAT:

Digo compilo mis clases contra lib_v1.0.jary distribuir mis binarios. Entonces puedo actualizar a lib_v1.1.jar. Suponiendo que mi código fuente se compila contra v1.1 sin errores, ¿mis viejos binarios distribuidos siempre trabajo con lib_v1.1.jaro tengo que volver a compilar y redistribuir nuevos binarios?

He leído sobre https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html pero no pude encontrar una respuesta clara o explícita a mi pregunta.

Viktor:

Fuente compatibilidad no implica la compatibilidad binaria.

Por ejemplo, hemos interfaz en la biblioteca siguiente:

// jar v1.0 
interface Service {
   int calculate(); // signature: ()I
}

Un llamamos desde nuestro código:

Service service = ...
int a = service.calculate(); // calls calculate()I method

En la versión v1.1 código de la biblioteca se ha modificado ligeramente:

// jar v1.1 
interface Service {
   Integer calculate(); // signature: ()Ljava.lang.Integer;
}

El código fuente sigue siendo compatible, gracias a autoboxing, pero si corremos nuestro código con la nueva versión de la biblioteca se producirá un error con java.lang.NoSuchMethodError: error Service.calculate () I.

Cuestiones similares pueden ser causados ​​por los alcances lambda, genéricos fundido, el tipo implícito moldes etc.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=316577&siteId=1
Recomendado
Clasificación