gpt4 book ai didi

Java - 如何只创建一个具有有效属性的对象?

转载 作者:太空狗 更新时间:2023-10-29 22:36:45 24 4
gpt4 key购买 nike

我在学习基础 Java 类(class)时遇到了一个问题:如何仅在将有效参数传递给构造函数后才创建对象?

我是否应该创建一个备用类并在实现验证后从那里调用构造函数?

或者我应该/可以在类中使用静态方法进行验证吗?

在这种情况下,最佳做法是什么?

最佳答案

标准做法是验证构造函数中的参数。例如:

class Range {
private final int low, high;
Range(int low, int high) {
if (low > high) throw new IllegalArgumentException("low can't be greater than high");
this.low = low;
this.high = high;
}
}

旁注:要验证参数不为空,这很常见,您可以使用:

import static java.util.Objects.requireNonNull;

Constructor(Object o) {
this.o = requireNonNull(o); //throws a NullPointerException if 'o' is null
}

更新

回复您关于社会安全号码的具体评论。一种方法是向类中添加一个方法:

//constructor
public YourClass(String ssn) {
if (!isValidSSN(ssn)) throw new IllegalArgumentException("not a valid SSN: " + ssn);
this.ssn = ssn;
}

public static boolean isValidSSN(String ssn) {
//do some validation logic
}

调用代码可能如下所示:

String ssn = getSsnFromUser();
while(!YourClass.isValidSSN(ssn)) {
showErrorMessage("Not a valid ssn: " + ssn);
ssn = getSsnFromUser();
}
//at this point, the SSN is valid:
YourClass yc = new YourClass(ssn);

通过该设计,您实现了两件事:

  • 您在使用之前验证用户输入(您应该始终这样做 - 用户非常擅长输入错误)
  • 您已确保如果 YourClass 被滥用,则会抛出异常,这将帮助您检测错误

您可以更进一步,创建一个包含 SSN 并封装验证逻辑的 SSN 类。 YourClass 然后将接受一个 SSN 对象作为参数,该对象始终是有效的 SSN。

关于Java - 如何只创建一个具有有效属性的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30803650/

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