gpt4 book ai didi

链接构造函数时的 Java 空参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:28:09 25 4
gpt4 key购买 nike

假设我有一个具有多个构造函数的类,其中一个是复制构造函数(用于复制对象):

public class Rectangle {

int width, height;

public Rectangle(int width, int height) {
this.width = width;
this.height = height;
}

public Rectangle(Rectangle source) {
this(source.width, source.height);
}
}

有什么方法可以检查复制构造函数中的 source 是否为 null,如果是,则抛出 IllegalArgumentException?因为另一个构造函数调用必须是我的构造函数中的第一条语句。

最佳答案

你可以这样做:

public Rectangle(Rectangle source) {
this(checkNotNull(source, "Source cannot be null").width, source.height);
}

private static <T> T checkNotNull(T t, String msg) {
if (t == null) throw new IllegalArgumentException(msg);
return t;
}

我也同意 Jon Skeet 的观点 NullPointerException在这种情况下,这不是一个坏行为。唯一的问题是,当你排长队时,当你得到一个 NPE 时,很难确定哪个对象是 null。 ,这就是更具体的消息可能有用的原因。

您也可以不重新发明轮子而使用标准 java.util.Objects方法,如果你不费心扔一个 NullPointerException相反:

public Rectangle(Rectangle source) {
this(Objects.requireNonNull(source, "Source cannot be null").width, source.height);
}

如果构建错误消息的成本很高,您可以提供 Supplier<String>相反,仅在实际需要时才支付构建消息的成本:

 public Rectangle(Rectangle source) {
this(Objects.requireNonNull(source, () -> explainError(source)).width, source.height);
}

关于链接构造函数时的 Java 空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38655540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com