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

时间:2013-06-06 02:16:31

标签: java oop subclass

我有一个Cage类:

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);

我得到错误:“默认构造函数无法处理由隐式超级构造函数抛出的异常类型CageException。必须定义一个显式构造函数。”有任何想法吗? :O(

2 个答案:

答案 0 :(得分:4)

这意味着在您的其他类的构造函数中,您正在创建Cage类,但该构造函数未正确处理该异常。

因此,要么在另一个构造函数中创建Cage类时捕获异常,要么使构造函数抛出CageException

答案 1 :(得分:2)

您可以在Cage实例化的类中使用helper方法:

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");
        }
    }
}