Manchmal in Java zu implementieren, gibt es einen Fall, in dem Sie eine Bibliothek verwenden, die eine final class Car
und möchten es implementiert einige Vehicle
Schnittstelle liefert, so dass Sie Truck
machen könnte und Bus
Klassen und behandle sie alle als Fahrzeuge in deinem Code. Aber Auto ist endgültig und es implementiert keine Schnittstellen.eine endgültige Klasse auf eine kompatible Schnittstelle, die die Klasse erhebt keinen Anspruch auf
Wie kann ich die letzte Car
Klasse von jemand anderem in meine Vehicle
Schnittstelle einwerfen, damit ich sie wie meine anderen Fahrzeuge weitergeben kann? Jede Instanzmethode in Vehicle wäre zu 100% kompatibel mit einer ähnlichen Methode in Bezug auf Instanzmethodennamen, Argumenttypen und Rückgabetypen. Es wäre äquivalent aus einer Duck-Typing-Perspektive.
Ich weiß, ich könnte eine Wrapper-Klasse machen, die nur jeden Methodenaufruf an ein internes Auto-Objekt delegiert. Das wäre der Java-Weg. Aber ich frage mich nur, ob es eine Technik gibt, um tatsächlich eine Klasse auf eine nicht verwandte (aber 100% kompatible) Schnittstelle zu übertragen. Es ist in Ordnung, wenn die Antwort böse ist.
Nein, die Wrapperlösung (Zusammensetzung) ist der einzige Weg. –
Sie könnten eine JDK-Proxy-Schnittstelle verwenden. – chrylis
@PaulBoddington Ist das eine JVM-Einschränkung oder eine Java-Sprachbeschränkung? Ich meine, konnte ich mit dem Klassenlader oder dem Bytecode diese Einschränkung umgehen? Ich denke Clojure und Groovy können so etwas machen. – GlenPeterson