0

似たような 2 つの型を受け入れる関数を書きたいと思います。しかし、同じではありません。

MyClassA {
  abc()
  a2b()
}

MyClassB {
   abc()
   a3b()
}

この 2 つで 1 つの方法は同じです。この関数は、これら 2 つのタイプのいずれかのリストを受け入れる必要があり、リスト内のオブジェクトに対して abc() を呼び出したいと考えています。

これは役に立たないようです:

    private <T> Set<MyclassX> createObject(List<T> classes) {

          Set<MyclassX> x;

          if ( T instanceof MyClassA)  {
               for ( MyClassA a : classes ) {
                    if (a.abc().equals("somethig")) {
                         x.add( t.abc());
                     }   
                }   
           }
           return x;
     }

調べる必要すらないinstanceof。リストを反復処理して値を比較するだけです。一致する場合は、メソッドを呼び出しますabc()

4

4 に答える 4

8

共通のインターフェイスを作成し、MyClassA と MyClassB を実装するだけです。

interface MyClass {
    void abc();
}
于 2013-06-20T22:04:49.840 に答える
0

ジェネリックを使用すると、次のことができます。

private <T> Set<MyclassX> createObject(List<T> classes) {
    Set<MyclassX> x;
    for ( T a : classes ) {
        if (a.abc().equals("somethig")) {
            x.add( t.abc());
        }
    }
}
return x;
}

t.abc()を返すと仮定しますMyclassX。(これは文字通りの意味であり、Xが他の何かを表しているとは想定していません。)

于 2013-06-20T22:07:19.710 に答える