Cuando se refactorizan los métodos, es fácil introducir incompabilities binarias (con versiones anteriores del código) en Java.Métodos refactorizados y compatibilidad binaria en Java
considerar el cambio de un método para ampliar el tipo de su parámetro a una interfaz de padres:
void doSomething(String x);
// change it to
void doSomething(CharSequence c);
Todo el código que utiliza este método seguirá compilará sin cambios, pero sí requiere una re-compilación (porque los binarios antiguos fallarán con un MethodNotFoundError).
¿Qué hay de tirar de un método en una clase para padres. ¿Esto requerirá una nueva compilación?
// before
public class B extends A{
protected void x(){};
}
// after
public class A {
public void x(){};
}
public class B extends A{}
El método ha sido movido de B a la A. matriz También ha cambiado la visibilidad de protección al público (pero eso no es un problema).
¿Necesito mantener un "contenedor de compatibilidad binaria" en B, o continuará funcionando (se enviará automáticamente a la clase principal)?
// do I need this ?
public class B extends A{
// binary compatibility wrapper
public void x(){ super.x(); }
}
Pensé lo mismo acerca de los métodos ampliados ... Eso no funciona porque los nombres de clase de los argumentos se vuelven parte del nombre del método interno. Me pregunto si lo mismo es cierto con el nombre de la clase que el compilador cree que declara el método. – Thilo
"Ampliación" afecta la firma del método, pero mover el método a una superclase no lo hace. Pruébelo en la línea de comandos. –
@bkail: haz una respuesta para que yo pueda votar. – Thilo