我正在研究一个带有多个子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#接口。
答案 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看作一个非常常用的示例
正如其他人已经指出的那样,它可能更具性能(取决于被调用方法的实现方式),但这不是给定的。