簡體   English   中英

在構造函數調用期間調用方法

[英]Calling methods during a constructor call

我一直在學習Android開發教程,並且看到很多這樣的電話:

String date = new StringBuilder().append(mMonth + 1).append("-").append(mDay).append("-").append(mYear).append(" "));

似乎是一種不錯的速記方法,但這真的是一種好習慣嗎? 這會帶來負面影響嗎?

這被稱為流暢接口

該代碼不會在調用構造函數期間調用方法。 構造函數完成 ,它將在構造函數返回的對象上調用方法。

這些方法調用中的每一個都以return this結束, return this就是關鍵。 這樣便可以將呼叫鏈接在一起。

是的,這很好-但是您不清楚您在擔心什么。 如果您認為這是在StringBuilder構造函數期間調用append方法,則不是。 此代碼等效於:

StringBuilder tmp = new StringBuilder();
tmp = tmp.append(mMonth + 1);
tmp = tmp.append("-");
tmp = tmp.append(mDay);
tmp = tmp.append("-");
tmp = tmp.append(mYear);
tmp = tmp.append(" ");
String date = tmp.toString();

每次調用append實際上將返回thisStringBuilder ,但在其他類似的API,對象可以被不可改變的,每個方法將建立一個新的對象,並返回......調用代碼將看起來是一樣的。

(當然,我假設實際代碼具有toString調用,否則它將無法編譯。)

請注意,這實際上等效於:

String date = (mMonth + 1) + "-" + mDay + "-" + mYear + " ";

...確實比原始代碼更具可讀性, 並且執行相同的操作 Java編譯器仍然會在StringBuilder使用StringBuilder 當然,您確實應該使用SimpleDateFormat或Joda的DateTimeFormatter格式化日期,當然...

負面影響包括:

  • 每秒顯着更高的WTF
  • 生氣的同伴程序員
  • 難以閱讀的代碼

話雖這么說……在某些情況下,代碼中的某些方法幾乎總是可以立即調用,這很有意義。 如果您喜歡執行此操作,那么我肯定會說不超過1個額外的方法調用,但總的來說,我仍然建議您不要這樣做。

沒有負面影響,只是使閱讀變得困難。 許多開發人員都遵循“代碼越少越好”的做法。

是否流暢的界面,在這種情況下,我更喜歡以下內容:

String date = String.format("%d-%d-%d ", mMonth+1, mDay, mYear);

更短,更好地閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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