Javaの場合は、final class Car
を提供するライブラリを使用し、インターフェイスを実装したい場合があります。Truck
クラス内でVehicleとして扱います。しかし、Carは最終的なもので、インターフェースを実装していません。クラスが実装すると主張していない互換クラスに最終クラスをキャスト
他の車両のように他の人の最終Car
クラスを私のVehicle
インターフェイスにキャストするにはどうすればいいですか? Vehicleのすべてのインスタンスメソッドは、インスタンスメソッド名、引数型、および戻り型に関して、Carの同様のメソッドと100%互換性があります。これは、ダックタイピングの観点からは同等です。
私はMyCar extends Vehicle
ラッパークラスを作成して、各メソッド呼び出しを内部のCarオブジェクトに委譲することができます。それはJava Wayです。しかし、実際にあるクラスを無関係な(ただし100%互換性のある)インターフェイスにキャストするテクニックがあるかどうかは不思議です。答えが悪ければOKです。
いいえ、ラッパーソリューション(組成)は唯一の方法です。 –
JDKプロキシインターフェイスを使用できます。 – chrylis
@ PaulBoddington JVMの制限、またはJava言語の制限ですか?つまり、クラスローダーやバイトコードをハッキングすると、この制限を回避できますか?私はClojureとGroovyがこのようなことをすることができると思います。 – GlenPeterson