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