gpt4 book ai didi

Java 构造函数样式 : check parameters aren't null

转载 作者:IT老高 更新时间:2023-10-28 13:51:47 25 4
gpt4 key购买 nike

如果你有一个类接受一些参数但它们都不允许为 null,那么最佳实践是什么?

以下是显而易见的,但异常(exception)有点不明确:

public class SomeClass
{
public SomeClass(Object one, Object two)
{
if (one == null || two == null)
{
throw new IllegalArgumentException("Parameters can't be null");
}
//...
}
}

这里的异常让你知道哪个参数为空,但构造函数现在很丑:

public class SomeClass
{
public SomeClass(Object one, Object two)
{
if (one == null)
{
throw new IllegalArgumentException("one can't be null");
}
if (two == null)
{
throw new IllegalArgumentException("two can't be null");
}
//...
}

这里的构造函数更简洁了,但是现在构造函数代码实际上不在构造函数中:

public class SomeClass
{
public SomeClass(Object one, Object two)
{
setOne(one);
setTwo(two);
}


public void setOne(Object one)
{
if (one == null)
{
throw new IllegalArgumentException("one can't be null");
}
//...
}

public void setTwo(Object two)
{
if (two == null)
{
throw new IllegalArgumentException("two can't be null");
}
//...
}
}

这些样式中哪种最好?

或者有没有更广泛接受的替代方案?

最佳答案

第二个或第三个。

因为它会告诉 API 的用户到底出了什么问题。

为了减少冗长,请使用 commons-lang 中的 Validate.notNull(obj, message)。因此,您的构造函数将如下所示:

public SomeClass(Object one, Object two) {
Validate.notNull(one, "one can't be null");
Validate.notNull(two, "two can't be null");
...
}

将检查放在 setter 中也是可以接受的,具有相同的详细注释。如果您的 setter 还具有保持对象一致性的作用,您也可以选择第三个。

关于Java 构造函数样式 : check parameters aren't null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997768/

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