java - Java返回通用类型问题:未经检查的覆盖返回类型需要未经检查的转换
问题描述
嗨,我遇到了泛型类型问题,并从 IDE 收到警告。我有一个包含泛型类型值的类:
public class Result <OUT>{
private final OUT outputValue;
public OUT getOutputValue() {
return outputValue;
}
}
我有抽象类:
public abstract class CustomSource {
public abstract <T> SourceFunction<T> getSource();
}
和扩展它的类:
public class OtherCustomSource extends CustomSource {
@Override
public SourceFunction<Result<MyEvent>> getSource() {
...some code...
}
}
IDE 给我警告:未经检查的覆盖返回类型需要未经检查的转换。我错过了什么?
解决方案
public abstract <T> SourceFunction<T> getSource();
这不是你打算做出的承诺。这表示“对于每一个 T
,我保证我可以获得类型的来源SourceFunction<T>
。” 然后你出现了并将其子类化为
public SourceFunction<Result<MyEvent>> getSource();
上面写着“具体来说,我可以给你一个类型的来源Result<MyEvent>
”,这是一个更弱的承诺。
如果您打算getSource
只返回一种特定类型,那么您的泛型应该在CustomSource
类上,而不是getSource
函数上。
public abstract class CustomSource<T> {
public abstract SourceFunction<T> getSource();
}
public class OtherCustomSource extends CustomSource<Result<MyEvent>> {
@Override
public SourceFunction<Result<MyEvent>> getSource() {
...some code...
}
}
OtherCustomSource
那么使用as a是有意义的CustomSource<Result<MyEvent>>
(因为它可以获得 type 的来源Result<MyEvent>
),但是例如将 aOtherCustomSource
视为 a是没有意义的CustomSource<Integer>
。
推荐阅读
- python - 将完整的循环输出转储到Python中的文本文件
- angular - 忽略来自 observable 的请求错误
- java - 将百分比值四舍五入到最接近的数字
- reactjs - 反应:你怎么能设置一个嵌套的孩子的状态
- reactjs - 如何防止 React Router 404 显示在所有页面上?
- javascript - 如何使用 react-gtm-module 初始化标签管理器?
- javascript - 如何根据D3中的自定义Y轴绘制堆积条形图
- php - simplexml_load_string 抛出数组到字符串的转换错误
- python - “if”命令只运行一次,不重复
- javascript - URL.createObjectURL 在某些组件中起作用,而在其他组件中不起作用 ReacrJS