Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型类的返回类_Java_Generics - Fatal编程技术网

Java 泛型类的返回类

Java 泛型类的返回类,java,generics,Java,Generics,我正在实现一个接口-,它是泛型类型 它有一个这样的方法,我需要实现 Class<T> getEncoderClass() 类getEncoderClass() 现在,如果实现是针对这样的简单类,那么实现很容易- public ACodec implements Codec<A>{ public Class<A> getEncoderClass(){ return A.class; } } public ACodec实现编

我正在实现一个接口-,它是泛型类型

它有一个这样的方法,我需要实现

Class<T> getEncoderClass()
类getEncoderClass()
现在,如果实现是针对这样的简单类,那么实现很容易-

public ACodec implements Codec<A>{

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

}
public ACodec实现编解码器{
公共类getEncoderClass(){
返回A.class;
}
}
但是对于一般的实现,我不知道如何编写eg-

public class A<B>{
}

public ACodec implements Codec<A>{

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

}
公共A类{
}
公共ACodec实现编解码器{
公共类getEncoderClass(){
//如何实现这一点?
}
}

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


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

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


因此,您的第一个示例中的代码也应该起作用。

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

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

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

}

也就是说,实际上不可能在
getEncoderClass
中获得由
A
表示的
类,因为泛型本身在编译时会经历类型擦除。

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

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

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

}

也就是说,实际上不可能在
getEncoderClass
中获得由
A
表示的
,因为泛型本身在编译时会经历类型擦除。

ACodec
也应该用类型参数定义。请参阅我的答案。
ACodec
还应使用类型参数定义。看看我的答案。