我有一个可行的方法,但警告我,是否有任何解决办法可以干净地删除它?
在此方法中,我将方法称为:<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
。