嵌套对象最佳实践

blo*_*824 6 java nested reference object

引用嵌套对象的最佳做法是什么?

说我有以下内容:

class Outer {
 private InnerA innerA;
 //getters and setters
}

class InnerA {
  private InnerB innerB;
  //getters and setters
}

class InnerB {
  private String someString;
  //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器或服务类中,我需要检查InnerB类的someString String变量,以确保它不为null或不为空,所以我这样做:

if (getOuter().getInnerA().getInnerB().getSomeString() != null && !getOuter().getInnerA().getInnerB().getSomeString().equalsIgnoreCase("") {
  //do something
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来很乱,如果嵌套对象本身为null,则可能会出现问题.

我是否在父对象中为子对象检查null创建getter和setter?只是想知道最佳实践是什么,如果有什么和/或你的一些人在你的代码中做了什么?

JB *_*zet 8

如果这些对象中的任何一个都可以为null,那么在调用此对象的getter之前必须检查null.

但是这种链接是缺乏封装的难闻气味(贫血对象只有数据,没有行为).你违反了得墨忒耳的法律:不要和陌生人说话.

  • 所以,`PersonDAO.getPerson(123).getAddress().getCity().loadMap()`是一个错误? (3认同)

kos*_*lan 7

您可以使用Apache Commons BeanUtils来浏览嵌套属性,如下所示:

将方法添加getSomeString()到您的Outer类并编写类似的东西

PropertyUtils.getNestedProperty(this, "innerA.innerB.someString");

我不记得PropertyUtils该类是否检查null属性,但我会看看Apache Commons BeanUtils站点.

希望这可以帮助!


Joh*_*tie 5

我建议阅读德米特定律。

  • 我建议熟悉映射到 POJO 的 XML 文档的奇妙世界。只是一个 LoD 根本不适用的例子。 (2认同)