4 回答
TA贡献1810条经验 获得超4个赞
解决方案是在此处使用Tas 类型,然后您可以删除您的演员表:
// before:
// SonarContainPaging sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
// after:
T sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
由于根据您的评论,getSonarObjectFromPagereturns T,T您传递给它的类在哪里:
<T extends SonarContainPaging> T getSonarObjectFromPage(String url, Map<String, Object> uriVariables, Class<T> klass, List<T> page)
在这种情况下,您传递了 class klass,它是 a Class<T>,因此getSonarObjectFromPage也会返回 a T。
TA贡献1841条经验 获得超3个赞
通常有两种方法可以避免此警告。
首先是将对象转换为类:
public static <T> T castMe(Class<T> clazz, Object object) {
return clazz.cast(object);
}
第二个是用注释抑制警告。这是一种不确定的方式,但是当您绝对知道可以将特定对象强制转换为相关泛型类型时,可以安全地使用它:
@SuppressWarnings("unchecked")
public static <T> T castMe(Class<T> clazz, Object object) {
return (T) object;
}
TA贡献1906条经验 获得超10个赞
正如 Sweeper 在他们的回答中提到的那样,您只需将类型更改sonarObject为T:
T sonarObject;
您还可以通过使用do-while减少冗余的循环来改进代码:
private <T extends SonarContainPaging> void getSonarListContainingPaging(String url, Map<String, Object> uriVariables, Class<T> klass, List<T> list) {
int page = 1;
T sonarObject;
do {
sonarObject = getSonarObjectFromPage(url, uriVariables, klass, page);
list.add(sonarObject);
} while (sonarObject.canContinueLooping(++page));
}
TA贡献1873条经验 获得超9个赞
您可以使用强制转换方法。 https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#cast-java.lang.Object-
list.add(klass.cast(sonarObject));
添加回答
举报