public void writeToParcel(Parcel parcel, int flags) throws IOException {
doSomethingThatThrowsIOException();
}
编译器:
异常IOException与throws子句不兼容 Parcelable.writeToParcel(Parcel,int)
我没有在文档或实际Parcelable
代码中的任何位置看到throws子句。这是一个讨厌的线程问题吗?
答案 0 :(得分:3)
Parcelable.writeToParcel(Parcel, int)
中的 Parcelable
不会抛出IOException。因此,如果扩展类并定义自己的writeToParcel(Parcel, int)
,则不能抛出不在父类中的已检查异常。
答案 1 :(得分:2)
从父类重写“writeToParcel”方法:Parcel。覆盖方法时,不能更改原始方法的签名和throws子句。
这两个选项是:外部化抛出IOException的东西 或者在try-catch块中处理异常......
答案 2 :(得分:1)
这是确切的问题,IOException是一个经过检查的异常,必须重新抛出或捕获。如果super
没有抛出此异常,那么你也不能。
来自JLS§11.2:
throws子句中指定的已检查异常类是其中的一部分 方法的实现者和用户之间的合同 构造函数。重写方法的throws子句可能未指定 该方法将导致抛出任何已检查的异常 通过其throws子句,不允许重写的方法 扔。当涉及接口时,有多个方法声明 可能会被一个重写声明覆盖。在这种情况下, 重写声明必须有一个throws子句 兼容所有被覆盖的声明(第9.4节)。