在您显示的代码中,验证问题不会传递回创建此对象实例的代码。这可能不是一件好事。
变体 1:
如果捕获方法/构造函数中的异常,请确保将某些内容传递回调用方。您可以放置一个字段,如果一切正常,则该字段设置为 true。这看起来像这样:isValid
private boolean isValid = false;
public FileDataValidator(String[] lineData){
    this.lineData = lineData;
    removeLeadingAndTrailingQuotes();
    try
    {
        validateName();
        validateAge();
        validateTown();
        isValid = true;
    }
    catch(InvalidFormatException e)
    {
        isValid = false;
    }
}
public boolean isValid() {
    return isValid;
}
变体 2:
或者,您可以让异常或其他异常传播给调用方。我已将其显示为未经检查的异常,但根据您的异常处理宗教,执行任何有效的操作:
public FileDataValidator(String[] lineData){
    this.lineData = lineData;
    removeLeadingAndTrailingQuotes();
    try
    {
        validateName();
        validateAge();
        validateTown();
    }
    catch(InvalidFormatException e)
    {
        throw new com.myco.myapp.errors.InvalidDataException(e.getMessage());
    }
}
变体 3:
我想提到的第三种方法有这样的代码。在调用代码中,您必须调用构造函数,然后调用将工作或不工作的函数。build()
String[] lineData = readLineData();
FileDataValidator onePerson = new FileDataValidator();
try {
    onePerson.build(lineData);
} catch (InvalidDataException e) {
    // What to do it its bad?
}
下面是类代码:
public FileDataValidator() {
    // maybe you need some code in here, maybe not
}
public void build(String[] lineData){
    this.lineData = lineData;
    removeLeadingAndTrailingQuotes();
    try
    {
        validateName();
        validateAge();
        validateTown();
    }
    catch(InvalidFormatException e)
    {
        throw new com.myco.myapp.errors.InvalidDataException(e.getMessage());
    }
}
当然,该函数可以使用您调用的方法以查看其是否正确,但是对于构建函数,异常对我来说似乎是正确的方法。build()isValid()
变体 4:
我想提到的第四种方法是我最喜欢的方法。它有这样的代码。在调用代码中,您必须调用构造函数,然后调用将工作或不工作的函数。build()
这遵循JaxB和JaxRS的工作方式,这与你的情况类似。
- 外部数据源 - 您有一个文件,它们具有 XML 或 JSON 格式的传入消息。
- 构建对象的代码 - 你有你的代码,他们有他们的代码库根据各种JSR中的规范工作。
- 验证与对象的生成无关。
调用代码:
String[] lineData = readLineData();
Person onePerson = new Person();
FileDataUtilities util = new FileDataUtilities();
try {
    util.build(onePerson, lineData);
    util.validate(onePerson);
} catch (InvalidDataException e) {
    // What to do it its bad?
}
以下是数据所在的类代码:
public class Person {
    private Name name;
    private Age age;
    private Town town;
... lots more stuff here ...
}
以及用于构建和验证的实用程序代码:
public FileDataValidator() {
    // maybe you need some code in here, maybe not
}
public void build(Person person, String[] lineData){
    this.lineData = lineData;
    removeLeadingAndTrailingQuotes();
    setNameFromData(person);
    setAgeFromData(person);
    setTownFromData(person);
}
public boolean validate(Person person) {
    try
    {
        validateName(person);
        validateAge(person);
        validateTown(person);
        return true;
    }
    catch(InvalidFormatException e)
    {
        throw new com.myco.myapp.errors.InvalidDataException(e.getMessage());
    }
}