首页 > 解决方案 > 在 Kotlin 中,是否有一种安全的方法来执行 ObjectInputStream.readObject?

问题描述

当我做

object_input_stream.readObject() as HashMap<Int, Int>

Intellij 抱怨这是来自Any!. 有没有一种安全的方法来处理阅读ObjectInputStream

使用as?也会显示警告:

在此处输入图像描述

标签: kotlin

解决方案


不,没有类型安全的方法可以做到这一点,因为编译器无法知道流包含什么类型的对象。

你已经告诉它它应该是 a HashMap<Int, Int>,但它只有你的话。如果(例如由于错误)你错了怎么办?这将在运行时导致 ClassCastException。警告是提醒您注意这种可能性。

你如何处理这种可能性取决于你。显而易见的选择是:

  • 用于as?将其安全地转换为可空值(然后测试或处理空值),
  • catch异常(然后采取适当的措施),或
  • 故意让异常被抛出给调用者(在这种情况下,您至少应该记录它,例如使用@Throws注释)。

推荐阅读