Re: [站內] Java 跟 C++ 搞曖昧? Namespace 有用嘛?

看板java作者 (wctang)時間18年前 (2006/03/12 20:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串21/27 (看更多)
※ 引述《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
文章代碼(AID): #14513MgU (java)
討論串 (同標題文章)
文章代碼(AID): #14513MgU (java)