JAVA中的对象层级调用

5

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

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

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

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

像这样调用可以吗?会影响性能吗?


1
什么?它违反了一些面向对象的原则(即数据隐藏),但从性能和理论上讲,这可能是可以接受的。 - Elliott Frisch
好奇心有时很烦人。 - Sachin Verma
我还注意到你决定放弃使用包...不要这样做。 - Elliott Frisch
2
先让它能工作,然后让它正确,最后让它快速。Knuth定律只是说不要跳过步骤1和2。 - Elliott Frisch
2个回答

5

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

直接访问类成员是不被赞同的,你会面临NullPointerExceptions的风险。

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


1
是的,我担心代码的可读性,还有空指针异常。 - Gugan
我所想的是,在每个类中都会有许多变量。我不想为所有变量创建get/set。 - Gugan
至少我可以为经常使用的变量创建它。 - Gugan
1
你应该使用适当的面向对象封装,并使用像Eclipse/IntelliJ/IDEA这样的集成开发环境,它会为你生成get*/set*方法。不要偷懒! - rolfl
是的,现在我明白我犯了一个大错误。Gosling,请原谅我。 - Gugan

1

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

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


如果不会影响性能,我会按照你说的去做。 - Gugan
1
这里与性能无关,而是与您的需求有关。如果您有这样的需求,您将如何调用在B中声明的C类中声明的d对象对应的setWidth方法,以此类推。这就是调用的方式。在Java中,它被称为链式调用。 - Nishant Lakhara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接