Lors de la refactorisation des méthodes, il est facile d'introduire des incompatibilités binaires (avec les versions précédentes du code) en Java.Méthodes refacturées et compatibilité binaire en Java
envisager de changer une méthode pour élargir le type de son paramètre à une interface parent:
void doSomething(String x);
// change it to
void doSomething(CharSequence c);
Tout le code qui utilise cette méthode continuera à compiler sans modifications, mais il nécessite une nouvelle compilation (car les anciens binaires échoueront avec un MethodNotFoundError). Que diriez-vous de tirer une méthode dans une classe parente. Cela exigera-t-il une recompilation?
// before
public class B extends A{
protected void x(){};
}
// after
public class A {
public void x(){};
}
public class B extends A{}
La méthode a été déplacé de B à A. parent Il a également changé la visibilité de la protection au public (mais ce n'est pas un problème). Dois-je maintenir un "wrapper de compatibilité binaire" dans B, ou continuera-t-il à fonctionner (envoi automatique à la classe parent)?
// do I need this ?
public class B extends A{
// binary compatibility wrapper
public void x(){ super.x(); }
}
Je pensais la même chose à propos des méthodes élargies ... Cela ne fonctionne pas parce que les noms de classe des arguments font partie du nom de la méthode interne. Je me demande si la même chose est vraie avec le nom de la classe que le compilateur pense avoir déclaré la méthode. – Thilo
"Élargissement" affecte la signature de la méthode, mais pas la migration de la méthode vers une superclasse. Essayez-le sur la ligne de commande. –
@bkail: faites-en une réponse, pour que je puisse voter. – Thilo