作者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