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