java - 如何修复 'Unchecked cast from MyClass to T'

标签 java list generics warnings

我有一个有效的方法,但给我一个警告,是否有任何解决方案可以彻底删除它?

  • 在这个方法中我调用方法:
    <T extends SonarContainPaging> T getSonarObjectFromPage(String url, Map<String, Object> uriVariables, Class<T> klass, List<T> page)
    这会返回一个扩展 SonarContainPaging 的对象。

  • 我尝试将扩展 SonarContainPaging 的对象添加到我的列表中,但我收到警告。

  • SonarContainPaging对象有一个方法 canContinuePaging它接受一个页面整数并返回一个 boolean 值。


警告:

Type safety: Unchecked cast from SonarContainPaging to T

private <T extends SonarContainPaging> void getSonarListContainingPaging(String url, Map<String, Object> uriVariables, 
        Class<T> klass, List<T> list) {
    int page = 1;
    SonarContainPaging sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
    page++;

    list.add((T)sonarObject); // Warning
    while (sonarObject.canContinueLooping(page)) {
        sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
        page++;

        list.add((T) sonarObject); // Warning
    }
}

你能想到什么解决办法?


@Sweeper给出的解决方案是将sonarObject的类型改为T
我犯的错误是假设一个通用的 T对象无法从其父对象调用方法。

最佳答案

解决方案是使用T作为这里的类型然后你可以删除你的类型转换:

// before:
// SonarContainPaging sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
// after:
T sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);

由于根据您的评论,getSonarObjectFromPage返回 T , 其中T是你传递给它的类:

<T extends SonarContainPaging> T getSonarObjectFromPage(String url, Map<String, Object> uriVariables, Class<T> klass, List<T> page)

在这种情况下,您通过了类(class) klass ,这是一个 Class<T> , 所以 getSonarObjectFromPage将返回 T

关于java - 如何修复 'Unchecked cast from MyClass to T',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56338121/

相关文章:

generics - 为什么我收到此代码的 'receiver type mismatch' 错误

java - 带有对象通配符的通用数组列表

java - 是否有可能在 Alfresco 中获取文档所附的工作流列表

java - 使用泛型对整数数组进行排序 (Java)

python - 从列表填充表

python - 比较元组列表 - 无论位置如何都相等

generics - 保持部分应用的函数通用

java - 我是否正确实现了基于堆的优先级队列?下堆有必要吗?

java - 在java中创建单链表后如何返回到它的头部?

list - prolog 中的配方函数