栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

尝试/掌握构造函数-推荐做法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

尝试/掌握构造函数-推荐做法?

在显示的代码中,验证问题不会传达给正在创建此对象实例的代码。那可能不是一件好事。

变化1:

如果您在方法/构造函数内部捕获到异常,请确保将某些内容传递回调用方。

isValid
如果所有方法都可以,则可以将字段设置为true。看起来像这样:

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 pre 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的工作方式,这与您所遇到的情况类似。

  1. 外部数据源-您有一个文件,它们有XML或JSON格式的传入消息。
  2. 构建对象的代码-您拥有自己的代码,它们具有各自的代码库,这些代码库根据各种JSR中的规范工作。
  3. 验证不依赖于对象的构建。

调用代码:

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 pre 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());    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号