我有应该在每个实例中引发不同异常的这段代码。

Vehicle[] parkingLot = new Vehicle[5];
    try
    {
        // NEGATIVE INPUT
        parkingLot[0] = new Truck(1200.0, 2000, "Chevrolet", -8, new Person());
        // NULL MANUFACTURER
        parkingLot[1] = new Vehicle("", 8, new Person("John"));
        // NULL OWNER NAME
        parkingLot[2] = new Vehicle("Mitsubishi", 6, new Person(""));
        // TOW CAPACITY OVER 1500
        parkingLot[3] = new Truck(1700.0, 1000, "Nissan", 6, new Person("Joe"));
        // LOAD CAPACITY OVER 8600
        parkingLot[4] = new Truck(1200.0, 9000, "Nissan", 6, new Person("Frank"));
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }


由于我用来创建这些对象的值是硬编码的,因此无法使用类似以下内容的循环

parkingLot[index]


那么我应该如何设计代码,以便当一个实例引发异常时,仍然尝试实例化其余对象?

最佳答案

我认为正确的解决方案是使用单独的try ... catch块,但仅用于挑战,此(java 8)代码可以完成您想要的事情:

Callable[] initializers = {
    // NEGATIVE INPUT
    () -> parkingLot[0] = new Truck(1200.0, 2000, "Chevrolet", -8, new Person()),
    // NULL MANUFACTURER
    () -> parkingLot[1] = new Vehicle("", 8, new Person("John")),
    // NULL OWNER NAME
    () -> parkingLot[2] = new Vehicle("Mitsubishi", 6, new Person("")),
    // TOW CAPACITY OVER 1500
    () -> parkingLot[3] = new Truck(1700.0, 1000, "Nissan", 6, new Person("Joe")),
    // LOAD CAPACITY OVER 8600
    () -> parkingLot[4] = new Truck(1200.0, 9000, "Nissan", 6, new Person("Frank"))
};

for (Callable i : initializers) {
    try {
        i.call();
    } catch (Exception ex) {
        System.out.println(e.getMessage());
    }
}

10-07 19:30
查看更多