使用返回类型参数的类实现接口方法

3

我有一个第三方接口Converter<PRESENTATION, MODEL>,其中包含一个方法

Class<MODEL> getModelType();

我需要实现一个扩展Converter<String, Id<SOMETYPE>>的类,以满足编译器的要求,因此我需要实现以下方法:
@Override
public Class<Id<SOMETYPE>> getModelType() {
    return Id<SOMETYPE>.class;  // does not compile
}

这是一种需要退回到使用原始类型并实现 Converter<String, Id> (使用原始类型 Id) 的特殊情况吗?
2个回答

4

由于类型擦除,Id<SOMETYPE>.classId.class 相同,只是您无法返回前者或后者(编译错误)。因此,您需要欺骗编译器,例如:

@Override @SuppressWarnings("unchecked")
Class<List<String>> getModelType() {
    return (Class<List<String>>)(Class<?>)List.class;
}

2

我最近也遇到了这个问题。这是帮助我的问题:

Java将“.class”运算符用于泛型类型,例如List,转换为“Class<List<?>>”和“Class<List<Integer>>”

你的情况解决方案如下:

public interface Converter<PRESENTATION, MODEL>  {
    Class<MODEL> getModelType();
}

interface Id<E>  {
}

class MyConverter<E> implements Converter<String, Id<E>>  {
    @Override
    public Class<Id<E>> getModelType() {

        @SuppressWarnings("unchecked")  //We know this is okay
        Class<Id<E>> cls = (Class<Id<E>>)(Class)Id.class;
         return  cls;
    }
}

+1 如果提到了类似的问题,我没有找到任何相关内容。 - herman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接