0

私はこのようなクラス構造を持っています:

class A1,A2,..,An extends A;
class B1,B2,..,Bn extends B;

Aiそして、に変換するクラスBi:

    private B1 convert(A1 a1){}
...
    private Bn convert(An an){}

のような署名を持つ単一のパブリックメソッドを定義するにはどうすればよい<? extends B> convert(<? extends A> a)ですか? 今、私はこのアプローチしか持っていません:

    B convert(A a){
      if(A.getClass().equals(A1.class)){
         return convert((A1)a);
      }...
    }

パフォーマンスが重要で、メソッドが頻繁に呼び出される場合、instanceof を使用できますか?

4

2 に答える 2

2

より洗練された解決策は、おそらくA: [できれば , であるabstract場合]: でメソッドを宣言することです:Aabstract

public abstract B toB();

オーバーライド クラス (A1、A2、...) はそれをオーバーライドし、独自のBオブジェクトをインスタンス化する必要があります。

コード スナップ [static内部クラスとして実装したため、修飾子を使用します。クラスが外部クラスの場合は必要なく、使用できません]:

public abstract static class A { 
    public abstract B toB();
}
public static class A1 extends A {
    @Override
    public B1 toB() {
        return new B1();
    } 

}

public static class B {

}
public static class B1 extends B { 

}
于 2012-07-17T09:41:32.270 に答える
0

次のようなことができます:

public <AType extends A, BType extends B> BType convert(AType a) {...

しかし、次のようなコンバーターインターフェースを持つことができます:

public interface Converter<AType extends A, BType extends B> {

    AType convert(BType b);

    BType convert(AType a);

}

パフォーマンスの質問については、こちらをご覧ください

于 2012-07-17T09:18:07.693 に答える