作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] static method使用时机?
时间Fri Jan 3 09:44:43 2014
个人意见,仅供参考
※ 引述《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
1F:推 henry4343:第一段大概懂了!!!第二段还需要慢慢理解.. 01/03 12:55
2F:→ henry4343:感谢大大分享 01/03 12:57