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

Quoth编译器:

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

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

4

3 回答 3

3

Parcelable.writeToParcel(Parcel, int)inParcelable不会抛出 IOException。所以如果你扩展类并定义你自己的writeToParcel(Parcel, int),它就不能抛出一个不在父类中的检查异常。

于 2012-05-07T16:55:17.540 回答
2

“writeToParcel”方法被父类覆盖:Parcel。当你重写一个方法时,你不能改变原始方法的签名和 throws 子句。

这两个选项是:将引发 IOException 的内容外部化或在 try-catch 块中处理异常...

于 2012-05-07T16:55:51.120 回答
1

这就是确切的问题,IOException 是一个检查异常,必须重新抛出或捕获。如果super不抛出这个异常,你也不能。

来自JLS §11.2:

throws 子句中命名的检查异常类是方法或构造函数的实现者和用户之间契约的一部分。覆盖方法的 throws 子句可能不会指定此方法将导致抛出任何已检查的异常,而覆盖方法的 throws 子句不允许抛出该异常。当涉及接口时,一个以上的方法声明可能会被一个覆盖声明覆盖。在这种情况下,覆盖声明必须具有与所有覆盖声明兼容的 throws 子句(第 9.4 节)。

于 2012-05-07T16:55:44.217 回答