Refactored Methoden und Binärkompatibilität in Java

8

Beim Refactoring von Methoden ist es einfach, binäre Inkompatibilitäten (mit früheren Versionen des Codes) in Java einzuführen.

Sie sollten eine Methode ändern, um den Typ ihres Parameters auf eine übergeordnete Schnittstelle zu erweitern:

%Vor%

Der gesamte Code, der diese Methode verwendet, wird weiterhin ohne Änderungen kompiliert, erfordert jedoch eine erneute Kompilierung (weil die alten Binärdateien mit einem MethodNotFoundError fehlschlagen).

Wie wäre es, eine Methode in eine Elternklasse hochzuziehen? Wird dies neu kompiliert werden müssen?

%Vor%

Die Methode wurde von B auf das übergeordnete Element A verschoben. Außerdem wurde die Sichtbarkeit von "geschützt" in "öffentlich" geändert (dies ist jedoch kein Problem).

Muss ich in B einen "binären Kompatibilitäts-Wrapper" pflegen, oder wird er weiter funktionieren (automatisch an die Elternklasse senden)?

%Vor%     
Thilo 02.09.2009, 01:01
quelle

2 Antworten

12

"Widening" beeinflusst die Signatur der Methode, so dass sie nicht binärkompatibel ist. Das Verschieben einer Methode in eine Superklasse wirkt sich nicht auf die Methodensignatur aus, daher wird es funktionieren. Eclipse hat ein großartiges Dokument, das API- und ABI-Kompatibilität beschreibt:

Ссылка

Explizitere Regeln sind Teil 2:

Ссылка

Ich glaube, Sie interessieren sich für "Change-Typ eines formalen Parameters" (dh was Sie als Erweiterung bezeichnen) oder "API-Methode herauf Typhierarchie verschieben" (dh was Sie als Pull in eine Elternklasse bezeichnen ).

    
Brett Kail 03.09.2009, 05:15
quelle
-1

Es sollte weiterhin automatisch funktionieren, da Java eine dynamische Verknüpfung hat

    
Sam 02.09.2009 01:10
quelle