基于Class<>返回泛型实现时未经检查的强制转换警告争论

时间:2016-08-08 12:33:02

标签: java generics

我有以下设置:

@Override
public <T> Optional<EndpointProvider<T>> getProvider(Class<T>   providedClass) {
    if(providedClass.isAssignableFrom(RecommendationCategory.class)){
        return Optional.of((EndpointProvider<T>) new RecommendationCategoryProvider());
    }
    return Optional.empty();
}

private class RecommendationCategoryProvider implements EndpointProvider<RecommendationCategory> {

编译器正在给我一个未经检查的强制警告。我认为检查providedClass.isAssignableFrom(RecommendationCategory.class)会阻止未经检查的强制转换警告。

有没有办法在此设置中没有此警告?

1 个答案:

答案 0 :(得分:1)

这是我能做到的唯一方法。它不会显示任何警告。

public static <T> EndpointProvider<T> getProvider(Class<T> klass)
{
    if (klass.isAssignableFrom(RecommendationCategory.class))
    {
        return new EndpointWrapper<T>(klass.cast(new RecommendationCategory()));
    }

    return null;
}

private static class EndpointWrapper<X> implements EndpointProvider<X>
{
    public EndpointWrapper(X wrapper)
    {

    }
}

private static class RecommendationCategory
{

}

private static interface EndpointProvider<T>
{

}