簡體   English   中英

Java鏈接/嵌套方法調用

[英]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#接口。

我的情況是“嵌套函數調用”案例嗎?

不,這是方法鏈 (Builder模式)。

這有什么危險或不好嗎?

不,你的朋友錯了。 在你的情況下完全沒有壞習慣。 你正在建造一個Json,這很好。

使用方法鏈接實際上比您提供的替代方法更有效,因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM