作者cyclone350 (老子我最神)
看板java
标题Re: [问题] 关於autoload机制
时间Tue Apr 21 20:47:46 2015
※ 引述《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就是了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.192.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1429620468.A.45F.html
1F:推 mars90226: 应该是说import *跟一般import对看的人有差别 04/21 20:51
2F:→ mars90226: 用*的话,要实际去看code才会知道用了甚麽 04/21 20:51
3F:推 LaPass: JAVA的import会自己判断会不会用到,再去载入CLASS 04/21 22:45
4F:→ carylorrk: python 其实也会 compile 成 byte code, pyc 04/22 00:10
python 的那句话是我用直译语言去推论的
也许 python import 的方式与 java 不同
所以才会有 Explicit is better than implicit 说法?
以上不清楚还请 python 大师解释一下。
就我对 Java 理解,import 怎麽写比较像是 coding style
5F:→ ssccg: Java有runtime dependency也有runtime名称冲突 04/22 02:11
阿 ~ 写的时候没想到这个 case
如果你指定的 classpath 有多个 com.Class1,
那麽他在执行时会根据一定的顺序去取得其中一个
或是可用
http://goo.gl/xFr6tI
6F:→ ssccg: IDE会检查你写的code,但不会检查你用的lib里的dependency 04/22 02:12
※ 编辑: cyclone350 (123.193.192.133), 04/22/2015 08:39:42
7F:推 Killercat: 不过讽刺的是,同样是编译语言的C++,#include却是 04/22 23:16
8F:→ Killercat: 个百年大学问 :D 04/22 23:16
9F:→ Killercat: 不过这主要跟效能关系不大就是.... 04/22 23:17
10F:→ typers: java 的 import 应该等同於 php 的 use 04/23 11:03
11F:→ typers: 实际载入类别的是 ClassLoader, 与 php 的 autoload 相似 04/23 11:08