不使用原始类型就无法获得通用类型的类对象

时间:2018-08-04 09:00:24

标签: java class generics collections raw-types

请考虑以下内容:

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>>。但是,原始类型仅设计用于向后兼容,不建议使用。使用原始类型是这种情况的唯一解决方案吗?

1 个答案:

答案 0 :(得分:0)

您需要将Collection.class强制转换为Class<Collection<T>>。 试试这个:

public Class<Collection<T>> getInputType() {
    return (Class<Collection<T>>) (Class) Collection.class;
}