0
   public NoWheelsException(Car[] carArray){
        String holder = "";
        for (int i=0; i<carArray.length; i++) {
            if (i == carArray.length - 1) {
                holder = holder + carArray[i].name;
            }else{
                holder = holder + carArray[i].name + ", ";
            }
        }
        String message = holder + " has/have no wheels.";
        super(message);
    }

上面写的是我的代码的理想场景,最后是超级构造函数。虽然,由于 super 必须是第一个语句,我无法弄清楚如何从数组内联中开发字符串。我不能直接使用.toString(),因为字符串的外观有一定的标准。除了这个小细节之外,我已经设法弄清楚有关异常的所有内容。任何帮助将不胜感激!

更新

我被建议尝试 Strin.join 以便将它们链接在一起,尽管不幸的是对象引用名称与数组对象中的 name 变量不同......

4

1 回答 1

2

一种方法是创建私有静态方法,因为静态方法的存在与构造函数和实例化无关:

public NoWheelsException(Car[] carArray){
    super(buildMessageFrom(carArray));
}


private static String buildMessageFrom(Car[] cars) {
    StringBuilder message = new StringBuilder();

    String separator = "";
    for (Car car : cars) {
        message.append(separator);
        message.append(car.name);
        separator = ", ";
    }

    return message.toString();
}

(在循环中构建 String 时,StringBuilder 比字符串连接更有效。'holder = holder + ...' 的每次迭代都会创建一个新的 String 对象,最终需要进行垃圾回收。)

如果您对 Streams 感到满意,您可以在一行中完成所有操作:

public NoWheelsException(Car[] carArray){
    super(Arrays.stream(carArray).map(c -> c.name).collect(Collectors.joining(", ")));
}
于 2022-01-14T20:52:32.813 回答