【问题标题】:Cannot handle exception type thrown by implicit super constructor无法处理隐式超级构造函数抛出的异常类型
【发布时间】:2013-06-06 02:16:31
【问题描述】:

我有一个 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");
        }
    }
}

我正在尝试在另一个类主方法中实例化一个 Cage 对象:

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

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

【问题讨论】:

    标签: java oop subclass


    【解决方案1】:

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

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

    【讨论】:

    • 真的很棒。谢谢!我在一个只有一个主要方法的类中这样做;我通常不会为此创建构造函数。再次感谢。
    【解决方案2】:

    您可以在 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");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2018-05-21
      相关资源
      最近更新 更多