首页 > 解决方案 > 未经检查的强制转换警告:接口作为返回值,存储在实现所述接口的类中

问题描述

我的情况是,我有一个功能

public static MyInterface doSomething() {...}

和一个班级

MyList<O extends MyObject> extends MyListObject<O> implements MyInterface

和:

我现在的问题是,下面的代码

MyList<MyObjectA> var = (MyList<MyObjectA>)doSomething();

产生一个

Type safety: Unchecked cast from MyInterface to MyList<MyObjectA>

警告。
为什么呢?我的意思是doOperation()返回一个MyInterface类型并MyList实现所述接口......

我希望我的代码示例解释了所有类和接口之间的完整关系,并且我没有遗漏任何内容。

标签: javainterfacemultiple-inheritance

解决方案


你假装MyInterface是 aMyList<>但我很确定它不是——尽管你没有显示MyInterface.

比喻地说,您试图将每个工具 ( MyInterface) 视为锤子 ( MyList<>)。

如果您确定doSomething()始终返回 a ,则可以使用注释MyList标记包含强制转换的方法。@SuppressWarnings("unchecked")但是,为什么您首先要宣布doSomething()返回更一般MyInterface的呢?


推荐阅读