我有一个可行的方法,但警告我,是否有任何解决办法可以干净地删除它?


在此方法中,我将方法称为:<T extends SonarContainPaging> T getSonarObjectFromPage(String url, Map<String, Object> uriVariables, Class<T> klass, List<T> page)
这将返回扩展SonarContainPaging的对象。
我尝试添加一个将SonarContainPaging扩展到我的列表的对象,但收到警告。
SonarContainPaging对象具有方法canContinuePaging,该方法采用页面整数并返回布尔值。


警告:


  类型安全性:从SonarContainPaging到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)


在这种情况下,您传递了klass类,它是一个Class<T>,因此getSonarObjectFromPage也将返回一个T

07-26 07:36