1

私はこのようなインターフェースを持っています:

 interface Transformer { 
     public String transform( List<Object> elements );
 }

実装:

 class XMLTransformer implements Transformer{ 
     public String transform( List<MyXMLElements> elements );
 }

 class TXTTransformer implements Transformer { 
     public String transform( List<MyTXTElements> elements );
 }

ただし、MyXMLElements と MyTXTElements には共通の親がないことに注意してください。それらは完全に異なるオブジェクトです。

インターフェイスでもこれを試しました:

    public String transform( List<? extends Object> elements );
    public String transform( List<?> elements );
    public String transform( List<T extends Object> elements );
    public String transform( List<T> elements );

これを達成する方法はありますか?

4

3 に答える 3

2

これはジェネリックで可能です-インターフェイスのジェネリック型パラメーターを宣言します。

interface Transformer<T> { 
    public String transform( List<T> elements );
}

次に、実装クラスは、インターフェイスのジェネリック型パラメーターの代わりに実際のクラス名を使用するだけです。

class XMLTransformer implements Transformer<MyXmlElements>{ 
   public String transform( List<MyXMLElements> elements ) {}
}

class TXTTransformer implements Transformer<MyTXTElements> { 
   public String transform( List<MyTXTElements> elements ) {}
}
于 2013-07-15T18:34:11.787 に答える
0

これは、ジェネリック型の erase が原因です。JVMの場合、どちらの場合も要素のリストを使用してインターフェースを実装していますが、これは完全に受け入れられます。

于 2013-07-15T18:33:54.500 に答える