java - 如何避免使用@SuppressWarnings 投射列表
问题描述
我有下面的代码,它转换了一个 List 对象类型,我想避免使用@SuppressWarnings("unchecked")
注释,但我不想在 IDE 设置中将其关闭,因为我意识到它的重要性。
我将如何重写以下内容,以便删除注释并且 IDE 不会突出显示未经检查的强制转换警告?
我尝试将 替换CaseData
为?
元素类型,但我需要CaseData
稍后在课程中说明代码。
我看过这样的热门问题: 什么是 Java 中的 SuppressWarnings(“未选中”)?
@Override
protected void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
@SuppressWarnings("unchecked")
List<CaseData> cases = (List<CaseData>) model.get("cases");
解决方案
没有警告就没有办法做到这一点。在运行时根本无法检查对泛型类型的强制转换,编译器会通知您。我认为压制该警告通常是完全合法的,因此我认为您真的不需要其他解决方案。
但如果可以的话,请遵循@KarolDowbecki 的建议,我认为这是最好的解决方案。
如果您无论如何都想避免SuppressWarning
,以下是一些解决方法:
在使用元素时执行CaseData
强制转换,而不是强制转换整个列表:
List<?> cases = (List<?>) model.get("cases");
// No warning here, since we're casting the element instead of the list
CaseData data = (CaseData) cases.get(0);
复制cases
列表并事先检查所有元素:
// No warning here, since we're casting to List<?>
List<CaseData> cases = ((List<?>) model.get("cases")).stream()
// No warning here, since we're casting the elements instead of the list
.map(d -> (CaseData) d).collect(toList());
推荐阅读
- c++ - 我正在尝试在节点的变量中插入文本,而我的程序只是停在那里,没有编译错误
- mysql - 如何使此触发器适用于我的表?
- excel - 使用 Delphi 从 Excel 工作表中提取图像
- php - Wordpress - 如何在首页、functions.php 中添加类到导航栏( bs4navwalker )
- r - 根据 id 列将行更改为数据集列的函数
- javascript - Chrome 上的 onLoad 给出未捕获的 ReferenceError
- scala - 如何优化 akka-stream 中 REST API 调用的吞吐量
- django - Django PostgreSQL ForeignKey-Relation 总是抛出错误
- php - 如何在 php 中导入 mysql 数据库之前检查 csv 文件中的每一列数据?
- redis - 如何在 Redis 中为切片查询优化的张量建模