Re: [問題] static method使用時機?
個人意見,僅供參考
※ 引述《henry4343 (henry)》之銘言:
: 請問一下各位,關於static method的使用時機為何?
: 以下兩個例子
: 1. Book.openBook();
: 2. Book book = new Book();
: book.openBook();
: openBook(){
: system.out.println("open book");
: }
: 其實作的事情都一樣,請問一下什麼情況下會用1,什麼情況下會用2呢
: 對我來說..我想偷懶的時候就會1(少打一點字...)
: 但還是希望搞懂這兩種方法到底該怎麼使用比較好?
: 感謝各位
我想,會去思考這個問題是很好的
反過來說,有沒有多想三秒鐘呢? Orz
首先,static method 不是作用於一個 instance 上頭
從語意上來說(用你的程式碼)
book.openBook()
很確定你是要 book 這個 instance 作 openBook() 的動作
而 Book.openBook()... 並沒有對誰作
或著說,他就是毫無反應、傳統非 OOP 的 function / subroutine
用語意來說,看不出來到底是哪本「書」要打開
除非
Book.openBook(aBook);
我舉另外一個例子
如果你要在字串與 Book 物件之間轉換
那麼你可能就會需要
public class Book {
public static Book decode(String data) {
//內容不重要 XD
String[] field = data.split(",");
return new Book(field[0], field[1]);
}
public static String encode(Book aBook) {
return aBook.toString();
}
public String toString() {
return this.field0 + "," + this.field1
}
}
decode 的時候本來就還沒有那本書,所以 static method 很適合
這個時候的 class 就是分類學當中的 class
讓你方便記得要把字串解碼成 Book 時,從 Book 這個 class 去找
你要把這個 method 放到 FooUtil 可不可以呢?
你高興就好,至於你的老闆 or partner
會不會在你背後非常火,我就不知道了。
encode 的時候就比較微妙
(當然,我比較喜歡保持 static,跟 decode 對應)
但是你可以體會一下 encode() 裡頭的寫法
大概是這樣子吧 [遠目]
--
錢鍾書: 說出來的話
http://www.psmonkey.org
比不上不說出來的話
Java 版 cookcomic 版
只影射著說不出來的話
and more......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.168.241.236
推
01/03 12:55, , 1F
01/03 12:55, 1F
→
01/03 12:57, , 2F
01/03 12:57, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章