【问题标题】:Object hierarchical call in JAVAJAVA中的对象分层调用
【发布时间】:2013-12-20 11:10:21
【问题描述】:

我有一个关于对象分层调用的问题。

我有四个班级,分别是 A、B、C、D。

D 将在 C 中设置; C将在B中; B 将在 A 中。

如果我想在 D 类中做某事,我必须调用 abcdsetWidth("50%");(a, b, c, d 是 A, B, C, d 类的实例)。

这样称呼可以吗?这会影响性能吗?

【问题讨论】:

  • 什么?它违反了一些 OO 原则(即数据隐藏),但在性能方面和理论上可能都很好。
  • 好奇心有时很糟糕..
  • 我还注意到你已经决定避开包裹......不要那样做。
  • 先让它工作,然后让它正确,然后让它快速。克努特定律只是说不要跳过第 1 步和第 2 步。

标签: java class hierarchy


【解决方案1】:

对性能的影响将非常轻微......更大的问题是这对您的面向对象模型有什么影响。

直接访问一个类的成员是不受欢迎的,而且你正在冒着 NullPointerExceptions 的风险。

你更应该担心的是代码的可读性和可维护性。

【讨论】:

  • 是的。我担心可读性以及空指针异常。
  • 我的想法是,每个类中都会有很多变量。我不想为所有变量创建 get/set。
  • 至少我可以为经常使用的变量创建它。
  • 您应该使用适当的 OOP 封装,并使用像 Eclipse/IntelliJ、/IDEA 这样的 IDE,它会为您生成 get*/set* 方法。不要偷懒!
  • 是的。现在我可以理解我犯了一个大错误。原谅我的小鹅。
【解决方案2】:

这样打电话是完全合法的。我不认为它会有性能问题。 但设计并不好。 您应该在代码中使用 getter 和 setter。 例如 : 在你的情况下:a.getB().getC().getD().setWidth("50%").

在 A 类中,将 B 的变量声明为私有变量,与 B 类和 C 类类似。 它将确保面向对象设计的数据隐藏和封装原则。

【讨论】:

  • 如果不影响性能我就照你说的做。
  • 这里与性能无关。它关于你的要求。如果您有这样的要求,您将如何调用与在 B 中声明的 C 类中声明的 d 对象对应的 setWidth 方法等等。这是调用的方式。它被称为 java 中的链接。
猜你喜欢
  • 1970-01-01
  • 2016-10-11
  • 2014-08-10
  • 2019-07-24
  • 1970-01-01
  • 2019-07-19
  • 2021-03-29
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多