1

我正在编写一个具有 3 个特定类、ImageHandlerTiffHandlerJPEGHandler.

JPEGHandler并且TiffHandler都扩展ImageHandler。在所有 3 个类中都有一个名为 compress() 的方法,它压缩对象当前正在处理的任何图像。

我也在尝试创建一个单独的类来实现 Runnable,但我不想创建两个 Runnable 类,一个用于 TiffHandler,一个用于 JPEGHandler。我宁愿只创建一个可以接受 ImageHandler 对象的 Runnable 类。

我的问题是,由于 Runnable 类只有一个 ImageHandler 对象,所以每当我调用 compress() 时,它会在运行时抛出错误:

Uncompilable source code - compress() in fjimagecompressor.JPEGHandler cannot override compress() in fjimagecompressor.ImageHandler
  overridden method does not throw java.io.IOException

第二行让我感到困惑,因为在 ImageHandler 内部我有一个名为 compress() 的空白方法:

    public void compress() throws IOException{    
        /*blank*/
    }

在 TiffHandler 和 JPEGHandler 内部,我也有 compress(),它会抛出 IOException,除了 compress() 会根据它是 JPEGHandler 还是 TiffHandler 做一些不同的事情。我不确定我是否只是错误地使用了多态性,或者我的超类 ImageHandler 中是否缺少某些内容。为什么编译器说超级方法不会抛出 IOException 而我确实声明它确实如此?

4

1 回答 1

2

问题可能是您的.class文件和您的.java文件不同步,虽然您可以编译,因为您将throws子句添加到ImageHander.java,但您没有更新编译的代码。清理并重新编译您的整个项目,错误应该会消失。

于 2013-10-21T05:58:21.073 回答