Durante i metodi di refactoring è facile introdurre le inabilità binarie (con versioni precedenti del codice) in Java.Metodi refactoring e compatibilità binaria in Java
pensare di cambiare un metodo per ampliare il tipo del suo parametro ad un interfaccia madre:
void doSomething(String x);
// change it to
void doSomething(CharSequence c);
Tutto il codice che utilizza questo metodo continuerà a compilare senza modifiche, ma richiede un re-compile (perché i vecchi binari falliscono con un metodo MethodNotFoundError).
Che ne dici di inserire un metodo in una classe padre. Ciò richiederà una ricompilazione?
// before
public class B extends A{
protected void x(){};
}
// after
public class A {
public void x(){};
}
public class B extends A{}
Il metodo è stato spostato dalla B alla A. genitore Ha anche cambiato la visibilità da protetto al pubblico (ma che non è un problema).
Devo mantenere un "wrapper di compatibilità binaria" in B, o continuerà a funzionare (invio automatico alla classe genitore)?
// do I need this ?
public class B extends A{
// binary compatibility wrapper
public void x(){ super.x(); }
}
Ho pensato la stessa cosa sui metodi allargati ... Questo non funziona perché i nomi delle classi degli argomenti diventano parte del nome del metodo interno. Mi chiedo se lo stesso vale per il nome della classe che il compilatore pensa dichiara il metodo. – Thilo
"Allargamento" influisce sulla firma del metodo, ma lo spostamento del metodo su una superclasse non lo fa. Provalo sulla riga di comando. –
@bkail: crea una risposta, in modo che io possa votare. – Thilo