Java 数组中多个项的单个try-catch块

Java 数组中多个项的单个try-catch块,java,windows,Java,Windows,我有一段代码,它应该在每次实例化时抛出不同的异常 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("

我有一段代码,它应该在每次实例化时抛出不同的异常

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

老实说,最简单的方法就是在每一块周围单独放置一个try…catch块。除此之外,您还必须找到一种方法,以某种方式参数化您的构造,以便能够循环某些内容。你为什么不检查一下房间?然后,您可以创建一个不会抛出异常的构建器数组(使用硬编码值),然后循环这些构建器来实例化实际对象。不管怎么说,这似乎是一个很好的例子,因为你的构造函数开始接受很多参数。这不会很漂亮,但除非你重构,使构造函数不会抛出异常,否则你的代码不会变得更漂亮。(有趣的是,维基百科的文章实际上也使用了车辆作为例子。不过,请看一个好例子的投票结果;比维基百科更好。)