java - 未经检查的强制转换警告:接口作为返回值,存储在实现所述接口的类中
问题描述
我的情况是,我有一个功能
public static MyInterface doSomething() {...}
和一个班级
MyList<O extends MyObject> extends MyListObject<O> implements MyInterface
和:
MyObjectA
延伸MyObject
MyListObject
只实现接口Collection<O>
和List<O>
我现在的问题是,下面的代码
MyList<MyObjectA> var = (MyList<MyObjectA>)doSomething();
产生一个
Type safety: Unchecked cast from MyInterface to MyList<MyObjectA>
警告。
为什么呢?我的意思是doOperation()
返回一个MyInterface
类型并MyList
实现所述接口......
我希望我的代码示例解释了所有类和接口之间的完整关系,并且我没有遗漏任何内容。
解决方案
你假装MyInterface
是 aMyList<>
但我很确定它不是——尽管你没有显示MyInterface
.
比喻地说,您试图将每个工具 ( MyInterface
) 视为锤子 ( MyList<>
)。
如果您确定doSomething()
始终返回 a ,则可以使用注释MyList
标记包含强制转换的方法。@SuppressWarnings("unchecked")
但是,为什么您首先要宣布doSomething()
返回更一般MyInterface
的呢?
推荐阅读
- c# - c# Datagridview 行颜色列表视图项
- spring-integration - 如何使用 java config(而不是 xml)配置存储过程入站通道适配器
- nlp - Dbpedia 在 Python 中提取概念/实体/图形
- javascript - 如何从 P5.js 中 loadJSON 的回调函数中获取返回值
- postgresql - pg_dump 在 Linux 上工作,但给 Windows 错误
- ios - 裁剪 CMSampleBuffer 并处理它而不转换为 CGImage
- go - Kallax:包不在任何 go 路径中
- javascript - //未捕获的错误:选择颜色不是函数 - 我找不到错误
- apache-kafka - Kafka Admin:如何以编程方式显示和设置每个主题的保留时间?
- vbscript - VBS 中的 Sendkeys 在 telnet 会话中无法正常工作