Java链接/嵌套方法调用

时间:2015-08-13 13:21:43

标签: java json

我正在研究一个带有多个子JSONObjects的JSONObject。 这是我填写内容的方式:

myJson.getJSONObject(CAT_NAME).put(VAR_NAME, var)
                          .put(VAR_NAME2, var2)
                          .put(...);

一位朋友告诉我,使用“嵌套函数/方法调用”是一种非常糟糕的做法,我应该这样做:

myJson.getJSONObject(CAT_NAME).put(VAR_NAME, var);
myJson.getJSONObject(CAT_NAME).put(VAR_NAME2, var2);
myJson.getJSONObject(CAT_NAME).put(...);

从我的观点来看,我的方式更像是链式方法调用而不是嵌套方法调用。   而且我不喜欢第二种方式,因为它强制程序在put()方法已经返回时反复获取相同的对象。

我的情况是“嵌套函数调用”案例吗? 这有什么危险或不好吗?那是什么原因?

编辑:我不觉得我的问题是重复的。另一个问题涉及链式方法,但它主要讨论c#接口。

3 个答案:

答案 0 :(得分:4)

  

我的案例是“嵌套函数调用”案例吗?

不,那是method chaining(构建器模式)。

  

出于任何原因这是危险还是坏?

没有。你的朋友错了。在你的情况下完全没有坏习惯。你正在建造一个Json,这很好。

答案 1 :(得分:2)

使用方法链接实际上比您提供的替代方法更有效,因为myJson.getJSONObject(..)仅在第一种情况下调用一次,而您在第二种情况下多次调用它。调用getJSONObject(..)的成本远远高于重用它返回的原始对象的成本。

在不使用方法链接的情况下实现此目的的正确方法更像是:

JSONObject obj = myJson.getJSONObject(CAT_NAME);
obj.put(VAR_NAME, var);
obj.put(VAR_NAME2, var2);
obj.put(...);

就个人而言,我更喜欢不使用方法链接,因为我认为它看起来更好,但最终它是您的偏好,这里的代码与第一块代码的性能基本相同。

答案 2 :(得分:1)

他可能认为它很糟糕,因为它的可读性较差(但这是个人观点,并且很大程度上依赖于代码格式化,有人理解特定API的程度,熟悉方法链的概念等等。等等)。

尽管如此,这肯定不是一件坏事。实际上很多API都是这样的。只需将Java标准API中的StringBuilder看作一个非常常用的示例 正如其他人已经指出的那样,它可能更具性能(取决于被调用方法的实现方式),但这不是给定的。