简而言之,我第一次尝试构建几个值对象(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/

10-12 00:05
查看更多