2017-02-13 16 views
2

私は、ジェネリック型のインターフェイスであるCodecを実装しようとしています。ジェネリッククラスの戻りクラス

それは、実装は、このような単純なクラスのためであれば、私は

Class<T> getEncoderClass() 

を実装する必要があり、このような方法は、今、実装が簡単であり -

public ACodec implements Codec<A>{ 

    public Class<A> getEncoderClass(){ 
     return A.class; 
    } 

} 

しかし、ジェネリックの場合実装私はどのように書くか混乱しています -

public class A<B>{ 
} 

public ACodec implements Codec<A>{ 

    public Class<A<B>> getEncoderClass(){ 
     //How to implement this ? 
    } 

} 
+0

'ACodec'もタイプパラメータで定義する必要があります。私の答えを見てください。 – CKing

答えて

-2

Javaの一般的な情報ではコードをコンパイルした後に失われます(型消去)ので、各ジェネリッククラスも非ジェネリッククラスです。

最初の例のコードも同様に機能するはずです。

1

あなたは次のようにあなたがあなたのACodecクラスを定義する方法を変更する必要があります。ここでは

class ACodec<T> implements Codec<A<T>>{ 

    public Class<A<T>> getEncoderClass(){ 
     //How to implement this ? 
    } 

} 

、クラスAでクラスACodecTBは、同じタイプで置換されていなければならない型パラメータ私はそれがあなたが達成したいと思うものだと信じています。例:言っ

ACodec<String> aCodecStr = new ACodec<String>(); 
Class<A<String>> codecStr = aCodecStr.getEncoderClass();//works 
Class<A<Integer>> codecInteger = aCodecStr.getEncoderClass();//doesn't work 

は、コンパイル時自体の型消去を通過getEncoderClassジェネリック以降にA<T>Class表現を取得することは事実上不可能です。

関連する問題