[英]Java chained/nested method calls
我正在研究一個帶有多個子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#接口。
使用方法鏈接實際上比您提供的替代方法更有效,因為myJson.getJSONObject(..)僅在第一種情況下被調用一次,而您在第二種情況下多次調用它。 調用getJSONObject(..)比重用它返回的原始對象要花費更多的成本。
在不使用方法鏈的情況下實現此目的的正確方法更像是:
JSONObject obj = myJson.getJSONObject(CAT_NAME);
obj.put(VAR_NAME, var);
obj.put(VAR_NAME2, var2);
obj.put(...);
就個人而言,我更喜歡不使用方法鏈接,因為我認為它看起來更好,但最終它是你的偏好,這里的代碼與你的第一塊代碼基本上具有相同的性能。
他可能認為它很糟糕,因為它可讀性較差(但這是個人意見,並且很大程度上取決於代碼格式化,有人理解特定API的程度,熟悉方法鏈的概念等等)。
盡管如此,這當然不是一件壞事。 實際上很多API都是這樣的。 只需將Java標准API中的StringBuilder看作一個非常常用的示例。
正如其他人已經指出的那樣,它可能更具性能(取決於被調用方法的實現方式),但這不是給定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.