返回泛型类的类

时间:2017-02-13 09:59:52

标签: java generics

我正在接触一个接口 - 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 ?
    }

}

2 个答案:

答案 0 :(得分:1)

您需要更改定义ACodec类的方式,如下所示:

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

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

}

此处,班级T中的类型参数 ACodec和班级B中的A应替换为相同的类型而我相信这就是你想要达到的目标。示例:

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

也就是说,实际上不可能在Class中得到A<T>所代表的getEncoderClass,因为 Generics 在编译时会经历类型擦除。

答案 1 :(得分:-2)

在Java中,在编译代码(类型擦除)后,通用信息会丢失,因此每个泛型类也是非泛型类。

因此,您的第一个示例中的代码也可以正常工作。