Re: [問題] 關於autoload機制

作者: cyclone350 (老子我最神)   2015-04-21 20:47:46
※ 引述《tas72732002 (蔥頭)》之銘言:
: 請問一下各位大大,
: 之前在寫PHP時, 提倡使用autoload機制來必勉load不必要的檔案,
: 在python提倡Explicit is better than implicit哲學, 所以不建議使用autoload
: 那在java不知道大家都用Explicit 還是 implicit呢?
沒用過 php 及 python
剛查了一下 php 及 python 是直譯式語言
而 java 算是編譯式語言
1. php 的 autoload 避免 load 不必要的檔案
對 Java 而言沒有這個 issue.
假設你需要用到 com.Class1 與 com.Class2 兩個 class
你可以 import 兩次,也可以 import com.*
不論你怎麼寫,你被 compile 成的 class 都是一樣的
import com.Class1;
import com.Class2;
所以不會有 load 不必要檔案的問題
而且我也沒聽過 import 太多 class 導致效能變差的事情....
2. Explicit is better than implicit
python 可能是動態 load 時會有名稱衝突,我不知道 python 遇到這情況會怎樣,
但是 Java 如果有衝突,你編譯時就會報錯了,連執行都別想
所以你寫的再怎麼 implicit,編譯時找不到明確的 class 就會吐給你了
我是都用 IDE 幫我產生import code就是了
作者: mars90226 (火星人)   2015-04-21 20:51:00
應該是說import *跟一般import對看的人有差別用*的話,要實際去看code才會知道用了甚麼
作者: LaPass (LaPass)   2015-04-21 22:45:00
JAVA的import會自己判斷會不會用到,再去載入CLASS
作者: carylorrk (carylorrk)   2015-04-22 00:10:00
python 其實也會 compile 成 byte code, pyc
作者: ssccg (23)   2015-04-22 02:11:00
Java有runtime dependency也有runtime名稱衝突IDE會檢查你寫的code,但不會檢查你用的lib裡的dependency
作者: Killercat (殺人貓™)   2015-04-22 23:16:00
不過諷刺的是,同樣是編譯語言的C++,#include卻是個百年大學問 :D不過這主要跟效能關係不大就是....
作者: typers (Typer)   2015-04-23 11:03:00
java 的 import 應該等同於 php 的 use實際載入類別的是 ClassLoader, 與 php 的 autoload 相似

Links booklink

Contact Us: admin [ a t ] ucptt.com