无法处理隐式超级构造函数引发的异常类型

vyu0f0g1  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(403)

我有一节笼子课:

public class Cage<T extends Animal> {

    Cage(int capacity) throws CageException {
        if (capacity > 0) {
            this.capacity = capacity;
            this.arrayOfAnimals = (T[]) new Animal[capacity];                                                       
        }

        else {
            throw new CageException("Cage capacity must be integer greater than zero");
        }
    }
}

我试图在另一个类main方法中示例化cage的对象:

private Cage<Animal> animalCage = new Cage<Animal>(4);

我得到一个错误:“默认构造函数不能处理由隐式超级构造函数引发的异常类型。必须定义一个显式构造函数。“有什么想法吗?”o(

cunj1qz1

cunj1qz11#

可以在类中使用helper方法,其中 Cage 得到示例化:

class CageInstantiator {
    private Cage<Animal> animalCage = getCage();

    private static Cage<Animal> getCage() {
        try {
            return new Cage<Animal>(4);
        } catch (CageException e) {
            // return null; // option
            throw new AssertionError("Cage cannot be created");
        }
    }
}
ncgqoxb0

ncgqoxb02#

这意味着在另一个类的构造函数中,您正在创建cage类,但该构造函数没有正确处理异常。
所以要么在创建 Cage 在另一个构造函数中初始化,或使构造函数抛出 CageException .

相关问题