作者wctang (wctang)
站内java
标题Re: [站内] Java 跟 C++ 搞暧昧? Namespace 有用嘛?
时间Sun Mar 12 20:34:27 2006
※ 引述《godfat (godfat 真常)》之铭言:
: ※ 引述《ogamenewbie (荷兰烂银行)》之铭言:
: : 我借用你的例子来讲一下, 保证是错的 (啥!)
: : 我不是啥 SCJP 咩, 用错误的概念硬干出能用的东西是常有的事
: = =b
: 无言以对 XD
: : 不会... 依照载入顺序.
: 这样问题更大吧? = =b
: 连是否不小心重复了都不知道
: : import 的 path 也动态? 这什麽? @_@a
: 只是觉得这样做比较合理而已
: 我不知道实作上是否会有什麽问题,
: 只是单纯从使用者的角度来看,觉得现在这样没有对称性
: 如果路径写死,执行期却还能搬动位置,这样有时候会不小心出意外
: 既然执行期才去存取 .class 档,何不连路径都动态存取?
: String path = UserInput.getString();
: // could be godfat.Widget or
: // fatgod.Widget
: import path;
: Widget keyboard = new Widget();
: 这样可以动态改变类别库
之前好像也有谈过类似的问题@@
以我的想法来看,首先就是不要把 package 看成是目录,虽然他们看起来很像。应该把
package 和 class name 合起来当成是一个 class 完整名称, import 只是让你少打些
字的。
你了解 load class 是执行期动态进行的,但要 load 哪一个 class
(package+classname) 是编译期就决定的,执行期 load class 是依 class path 先後
顺序来 load (简化的说法),所以不会有名称冲突的问题, classpath 在前面的有优先
权。
至於你想要动态改变 load 到的 class ,以你程式的写法是不行的,也就是 compile 时
就决定你要 load 的 class 的全名,不可以等到执行期决定是 xxx.Aaa 还是 yyy.Aaa
。但 Java 的动态性表现在另一个地方,你可以在执行期改变你的 classpath ,有点类
似你下了不同的 -classpath 参数,但是是在执行期可以改变的。不过一般程式是用
不到这种功能的,有兴趣应该去研究 ClassLoader 相关议题。
BTW, 如果想的话,用 ClassLoader 是可以做到从任何地方去 load class ,例如不照
目录来放,或是从 database 中去 load class ,都是做得到的。这也是我建议不要把
package 想成是目录的原因。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.106.24