我有一个有效的方法,但给我一个警告,有没有什么解决方案可以干净地删除它?
>
在这个方法中,我调用以下方法:
我试图将一个扩展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
对象无法从其父对象调用方法。
正如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));
}
通常有两种方法可以避免此警告。
第一个是将对象强制转换到类:
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;
}
解决方案是在此处使用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,这是一个类
我在这里遇到了一个关于带列表的泛型有界类型的小问题。请帮帮我! 有什么方法可以克服这个问题,或者我可以安全地压制警告吗?
我的代码:-文件1。JAVA File2.java(catlisting_xpath元素的XPATH) 错误:- JAVAlang.ClassCastException:类组织。openqa。硒。遥远的RemoteWebElement不能转换为java类。util。列表(org.openqa.selenium.remote.RemoteWebElement位于加载器“app”的未命名模块中;jav
我正在做一个java项目,我遇到了这个问题,不知道如何修复它。 } 当我尝试运行该程序时,它给出了错误: 线程“main”java.lang.ClassCastException中出现异常:无法将Stock强制转换为java.lang.Comparable 有人知道怎么了吗?
完全错误: 用户类: 导致此错误的实现:
问题内容: 请帮忙,我在以下代码中收到以下消息: PuntoNota.java AdapterDatos: 该应用程序运行良好,但是我收到以下消息: 未经检查的强制转换:从’java.io.Serializable’到’java.util.ArrayList’更少…(Ctrl + F1)。 关于此代码:(ArrayList)getIntent()。getSerializableExtra(“ my
问题内容: 在我的spring应用程序上下文文件中,我有类似以下内容: 在java类中,实现如下所示: 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的转换 我做错了什么?我该如何解决该问题? 问题答案: 好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做