简而言之,我第一次尝试构建几个值对象(VO),但无法解析构造函数中的this.name
用法。
我刚刚从本文(“ Convert Guard Clauses to Value Objects”)中发现了“值对象”的概念,并且在尝试实现示例代码时遇到了一些问题,在这些问题中,作者简化了示例。我已经解决了所有这些问题,但最后一个错误阻止了以下编译器消息构建代码:
Compilation failed due to following error(s).
Name.java:6: error: cannot find symbol
this.name = name;
^
symbol: variable name
PhoneNumber.java:10: error: cannot find symbol
this.phoneNumber = phoneNumber;
^
symbol: variable phoneNumber
2 errors
以下是我的项目的四个类文件:
Event.java
public class Event {
public void registerVisitor (Name name, PhoneNumber phoneNumber) {
// Do actual registration...
}
}
名称.java
public class Name {
public Name (String name) {
if (name == null || name.trim ().isEmpty ()) {
throw new IllegalArgumentException ("Name was empty");
}
this.name = name;
}
//...
}
PhoneNumber.java
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class PhoneNumber {
public PhoneNumber (String phoneNumber) {
Pattern PHONE_PATTERN = Pattern.compile("\\d{10}|(?:\\d{3}-){2}\\d{4}|\\(\\d{3}\\)\\d{3}-?\\d{4}");
if (!PHONE_PATTERN.matcher(phoneNumber).matches()) {
throw new IllegalArgumentException("Number invalid");
}
this.phoneNumber = phoneNumber;
}
//...
}
Main.java
class Main {
public static void main (String[]args) {
Event eventVar = new Event (); //
Name nameVar = new Name("MyName Test");
PhoneNumber phNumVar = new PhoneNumber("999-999-9999");
eventVar.registerVisitor(nameVar, phNumVar);
}
//...
}
就“预期结果”而言,我要做的就是获得此成功编译和实例化对象。我的兴趣是能够创建可以有效用作自验证输入的VO。
PS:我在Windows系统上使用JDK 8。
最佳答案
您的姓名类别没有名为“姓名”的字段。
public class Name {
private final String name; //added field
public Name (String name) {
if (name == null || name.trim ().isEmpty ()) {
throw new IllegalArgumentException ("Name was empty");
}
this.name = name;
}
//...
}
关于java - 如何使this.name在Value Object构造函数的类定义中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55379195/