我有第三方界面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
)?
答案 0 :(得分:4)
由于类型擦除,Id<SOMETYPE>.class
与Id.class
相同,除了您不能返回前者或后者(编译错误)。所以你需要欺骗编译器,例如:
@Override @SuppressWarnings("unchecked")
Class<List<String>> getModelType() {
return (Class<List<String>>)(Class<?>)List.class;
}
答案 1 :(得分:2)
我最近也遇到过这个问题。这是帮助我的问题:
您的案例中的解决方案是:
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;
}
}