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
还应使用类型参数定义。看看我的答案。