java – 使用异常处理来消除子类构造函数中的无关异常

我正在用Java编写一个类,它是我编写的另一个类的子类,它的构造函数显式调用了超类的构造函数.超类的构造函数在直接初始化时可能抛出几种类型的异常,但是当我初始化我的子类的一个实例时,有几个异常永远不会被抛出(通过设计).

我尝试在子类的构造函数中捕获这些异常但我收到一条错误,指出“构造函数调用必须是构造函数中的第一个语句”.为什么我不能抓住这些例外?

例如,下面的代码:

public class Persian_Cat extends Cat {

    public Persian_Cat(File file) {
        try{
            super(file);
        } catch(InvalidArgumentException e) {
        } catch(FileNotFoundException e) {
        }
    }
}

标记语句super(file);作为错误.

我如何实现子类构造函数,以便它知道这些异常是无关紧要的?我需要这个,因为我不希望稍后在我的代码中为try {} … catch {}包装此构造函数.

最佳答案
可悲的是,如果你使用超级(…);它必须是构造函数中的第一行代码.没有办法避免这种情况.

一种解决方案是创建另一个不抛出这些异常的构造函数.将此范围视为受保护而非公开可能是明智的.您可能希望记录API以明确哪些输入验证(或其他)由于哪些假设而未进行.

转载注明原文:java – 使用异常处理来消除子类构造函数中的无关异常 - 代码日志