请考虑以下内容:
public interface Converter<I, O> {
public Class<I> getInputType();
public Class<O> getOutputType();
}
如果我实现接口并用非泛型类型填充类型参数,那么一切仍然很好:
public class ConverterImpl implements Converter<UUID, String> {
public Class<UUID> getInputType() {
return UUID.class;
}
public Class<String> getOutputType() {
return String.class;
}
}
但是,如果我实现接口并用泛型类型填充类型参数,则会出现问题:
public class ConverterImpl<T> implements Converter<Collection<T>, String> {
public Class<Collection<T>> getInputType() {
return Collection.class; //Compile time error
}
public Class<String> getOutputType() {
return String.class;
}
}
因为Collection.class
返回Class<Collection>
而不是Class<Collection<Something>>
。但是,原始类型仅设计用于向后兼容,不建议使用。使用原始类型是这种情况的唯一解决方案吗?
答案 0 :(得分:0)
您需要将Collection.class
强制转换为Class<Collection<T>>
。
试试这个:
public Class<Collection<T>> getInputType() {
return (Class<Collection<T>>) (Class) Collection.class;
}