为什么我不能从Parcelable.writeToParcel(Parcel,int)中抛出IOException?

时间:2012-05-07 16:49:42

标签: android ioexception parcelable

public void writeToParcel(Parcel parcel, int flags) throws IOException {
   doSomethingThatThrowsIOException();
}

编译器:

  

异常IOException与throws子句不兼容   Parcelable.writeToParcel(Parcel,int)

我没有在文档或实际Parcelable代码中的任何位置看到throws子句。这是一个讨厌的线程问题吗?

3 个答案:

答案 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节)。