【发布时间】:2020-09-08 04:04:04
【问题描述】:
所以我试图制作一个与 uber 类似的 Ride 系统。所以我试图为汽车的注册号设置一些规则。
public void setRegNo(String regNo) {
if (regNo.length() == 6) {
if (regNo.substring(0, 3).matches("[a-zA-Z]+")) {
if (regNo.substring(3).matches("[0-9]+")) {
this.regNo = regNo;
} else {
this.regNo = "Error! The Registration number ends with 3 numerical characters.";
}
} else {
this.regNo = "Error! The registration number begins with 3 alphabetical characters.";
}
} else {
this.regNo = "Error! The Registration number must be 6 characters long.";
}
}
根据这个setter方法,注册号必须至少有6个字符长,前三个字符必须是字母,后三个字符必须是整数。然后我做了一个getter方法,最后把这个注册号传给了car类的构造函数。但令人惊讶的是,当我尝试打印注册号时,它没有遵守这些规则。我添加了一张我得到的结果的图片。 enter image description here
所以如果有人知道为什么会这样,请告诉我。
【问题讨论】:
-
你在哪里调用
setRegNo方法?我猜你误解了 set 和 get 的实际工作方式。 w3schools.com/java/java_encapsulation.asp -
对象初始化从构造函数开始,在你的情况下,它从构造函数开始,set方法从未被调用,然后你调用get方法。
-
请包含minimal reproducible example,以便我们了解它是如何调用的。否则它看起来不错,虽然过于复杂。你可以用一个正则表达式来做到这一点。
-
构造函数在创建新对象时不会调用 setter 方法。很明显,您的构造函数中有一些问题不在图像中。您需要在构造函数中调用 setRegNo(regNo),而不是调用 this.regNo = regNo。
标签: java constructor getter setter