开发者社区> 问答> 正文

如何消除类型转换警告?

已解决

如何消除类型转换警告?

展开
收起
游客lmkkns5ck6auu 2022-10-26 18:10:48 400 0
1 条回答
写回答
取消 提交回答
  • 推荐回答
    1. 利用注解初始化 Mockito 提供@Mock 注解来模拟类实例,提供@Captor 注解来初始化参数捕获器。 由于这些注解实例是通过测试框架进行初始化的,所以不会产生类型转换警告。

    2. 利用临时类或接口 我们无法获取泛型类或接口的 class 实例,但是很容易获取具体类的 class 实例。这 个解决方案的思路是——先定义继承泛型类的具体子类,然后 mock、spy、forClass 以及 any 出这个具体子类的实例,然后把具体子类实例转换为父类泛型实例。

    3. 利用 CastUtils.cast 方法 SpringData 包中提供一个 CastUtils.cast 方法,可以用于类型的强制转换。这个解 决方案的思路是——利用 CastUtils.cast 方法屏蔽类型转换警告。

    4. 利用类型自动转换方法 在 Mockito 中,提供形式如下的方法——泛型类型只跟返回值有关,而跟输入参数 无关。这样的方法,可以根据调用方法的参数类型自动转换,而无需手动强制类型 转换。如果手动强制类型转换,反而会产生类型转换警告。

    5. 利用 doReturn-when 语句代替 when-thenReturn 语句 Mockito 的 when-thenReturn 语句需要对返回类型强制校验,而 doReturn-when 语句不会对返回类型强制校验。利用这个特性,可以利用 doReturn-when 语句代 替 when-thenReturn 语句解决类型转换警告。

    6. 利用 Whitebox.invokeMethod 方法代替 Method.invoke 方法 JDK 提供的 Method.invoke 方法返回的是 Object 类型,转化为具体类型时需要强制 转换,会产生类型转换警告。而 PowerMock 提供的 Whitebox.invokeMethod 方法 返回类型可以自动转化,不会产生类型转换警告。

    7. 利用 instanceof 关键字 在具体类型强制转换时,建议利用 instanceof 关键字先判断类型,否则会产生类型 转换警告。

    8. 利用 Class.cast 方法 在泛型类型强制转换时,会产生类型转换警告。可以采用泛型类的 cast 方法转换, 从而避免产生类型转换警告。

    9. 避免不必要的类型转换 有时候,没有必要进行类型转换,就尽量避免类型转换。比如:把 Object 类型转换 为具体类型,但又把具体类型当 Object 类型使用,就没有必要进行类型转换。像这 种情况,可以合并表达式或定义基类变量,从而避免不必要的类型转化。

    以上内容摘自《Java工程师必读手册》电子书,点击https://developer.aliyun.com/ebook/download/7780 可下载完整版

    2022-10-26 20:39:53
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载