Java 返回基于类的泛型实现时未选中强制转换警告<&燃气轮机;论点

Java 返回基于类的泛型实现时未选中强制转换警告<&燃气轮机;论点,java,generics,Java,Generics,我有以下设置: @Override public <T> Optional<EndpointProvider<T>> getProvider(Class<T> providedClass) { if(providedClass.isAssignableFrom(RecommendationCategory.class)){ return Optional.of((EndpointProvider<T>) ne

我有以下设置:

@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> {
@覆盖
公共可选getProvider(类providedClass){
if(providedClass.isAssignableFrom(RecommendationCategory.class)){
返回可选的.of((EndpointProvider)new RecommendationCategoryProvider());
}
返回可选的.empty();
}
私有类推荐CategoryProvider实现EndpointProvider{
编译器给了我一个未经检查的强制转换警告。我认为检查ProviderdClass.isAssignableFrom(RecommendationCategory.class)可以防止未经检查的强制转换警告


有没有办法在该设置中不显示此警告?

这是我唯一可以找到的方法。它不会显示任何警告

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>
{

}
公共静态端点提供程序getProvider(类klass)
{
if(klass.isAssignableFrom(RecommendationCategory.class))
{
返回新的EndpointWrapper(klass.cast(new RecommendationCategory());
}
返回null;
}
私有静态类EndpointWrapper实现EndpointProvider
{
公共端点包装器(X包装器)
{
}
}
私有静态类推荐类别
{
}
私有静态接口端点提供程序
{
}

有时候,编译器会抛出一个警告,让你知道得更清楚。在一个完美的世界里,这不会发生,但也不会让你失去理智(或开发时间)结束。但是,在这种情况下,我相信您需要确保检查的是组件类型,而不是基类。如果您已经这样做了,那么很好,在这种情况下,您比编译器更聪明。您可以使用来告诉编译器忽略警告。请注意,我需要将其强制转换为EndpointProvider,而不是RecommendationCategory它自己。所以我不能这样做。编辑了答案-没有办法在运行时安全地检查泛型。您好,谢谢编辑,但它仍然不适用于这种情况。我需要检查isAssignableFrom,因为当它不可赋值from时,我需要返回Optional.empty。在生产代码中还有很多if-else语句对于其他类的提供程序。@bob只使用
instanceof
可能会很有用,因为Java可以更容易地优化它。但是providedClass是否总是类的一个实例而不是我想要的类型?或者在这种情况下我可以以不同的方式使用它?