2017-08-14 4 views
-2

複数の同様の外部ライブラリを使用するためのアダプタインターフェイス(および実装)を作成します。Java、2つの異なる汎用インスタンス間で変換する

たとえば、外部ライブラリのインターフェイスがあります。これらのライブラリは、Converterを実装し、機能を拡張するために登録するためのガイドです。

のLib A

public interface AConverter<S, D> { 
    D convert(S source); 
} 

のLib B

public interface BConverter<S, D> { 
    D convert(S source); 
} 

両方のインターフェイスは、同じ方法を指定します。

私が欲しいのは、私自身のMyConverterインターフェイスを使用することです。

public interface MyConverter<S, D> { 
    D convert(S source); 
} 

ユーザーは、このクラスを実装し、自分のライブラリーは、AConverterのLIBAの実装やBConverterのLibBの実装のいずれかに実装を変換します。これは可能ですか?

EDIT:

私は工場出荷時のパターンをしたいか、LIBAインターフェイスとLibBインタフェースを拡張しません。 MyConverterはコアライブラリ、LibAとLibBは外部プラグ可能なライブラリです。

public interface MyConverter<S, D> extends AConverter<S, D>, BConverter<S, D> { 
    ... 
} 

あなたは今、ライブラリ・インタフェースのいずれかの代わりにそれを使用することができます:私がしようとしています何

public ALibAdapter { 
    AConverter change(MyConverter convert) { 
     /** 
     * Anything I can do? 
     */ 
     return aConverter; 
    } 
} 

答えて

0

あなたのインターフェイスは、既存のインターフェイスを拡張することができ、あります。

すべてのメソッドの名前が同じ場合(convert)、これらのメソッドはオーバーライドできます。それ以外の場合は、Java 8のデフォルトメソッド実装を使用して、独自のメソッドから実装を呼び出す必要があります。

+0

ありがとうございますが、私はコンバータインターフェイスでmakeとlibの依存関係をしたくありません。 –

関連する問題