我有一个有效的方法,但给我一个警告,是否有任何解决方案可以彻底删除它?
在这个方法中我调用方法:
<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/