我在学习基本的Java课程,但遇到一个问题:仅在将有效参数传递给构造函数后,才如何创建对象?
验证完成后,我应该做一个替代类并从那里调用构造函数吗?
还是应该/应该在类中使用静态方法进行验证?
在这种情况下,最佳做法是什么?
标准做法是验证构造函数中的参数。例如:
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;
}
}
旁注:要验证参数不为null(这很常见),可以使用:
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。
问题内容: 用Javascript将是: 但是Python中相同的语法会创建一个字典,那不是我想要的 问题答案: 有两种功能用途。
问题内容: 我是Java的新手,并且开始使用Java 。我想做的是为学生创建一个。每个学生都有与其相关的不同属性()。我试图弄清楚如何使用此属性添加新的学生对象。这是我所拥有的: 问题答案: 您需要的是以下内容:
本文向大家介绍如何让一个对象具有私有属性?相关面试题,主要包含被问及如何让一个对象具有私有属性?时的应答技巧和注意事项,需要的朋友参考一下 Symbol 生成的每个值都是独一无二的 用 Symbol 作 key 值 无论是 for in 或 for of都遍历不到 只能用Object.getOwnPropertySymbols 才可以遍历到
我有一个函数,它将调用外部资源(例如REST)并根据结果返回JSON对象。 例如,如果我发送一个POST并且它可以工作,我需要对象是: 但是当它由于某种原因失败时,我不想要id(因为它将是未定义的)。类似于: 所以只有一个处理方法: 当一切正常时,它会工作,但当它失败时,它会呈现: 有没有办法使“id”成为可选的,这取决于它是否被定义?类似于: 那么在“未定义”中,它将被忽略?我知道我可以只取这个
我试图学习数组对象在Java但不明白。我确实明白如何将输入存储到数组对象中,但不明白如何比较数组中的每个项来做#7和#8。我试图在网上搜索,但从那里卡住了。 > 创建具有以下属性的班级学生:姓名、年龄、地址、电子邮件地址 创建一个空构造函数,用于初始化所有属性的空值。 创建一个接受所有参数并初始化所有属性的构造函数。 为所有属性创建访问器和变异器方法。 创建一个toString方法以返回学生的详细
问题内容: 我只想确认我完全了解CDI起作用的前提条件。如果我有A类: 现在,当我使用以下方法实例化此类时: 在这种情况下,Ab将为空。 但是如果我在另一个类中定义一个成员: 然后使用a,ab将被正确填充? 仅当需要注射的类也是由CDI容器创建的时,CDI才起作用吗?或者,如果使用普通实例化和新实例创建POJO时注入结果为空,那我会丢失什么(是的,我已经安装了beans.xml)? 问题答案: 尽