作者HuangTzHuan ()
看板java
標題Re: [問題] package 與 class 名稱相同問題
時間Fri Jul 8 18:18:18 2011
: 假設如下的程式碼:
:
: tw/sub1/test.java (package 為 tw.sub1)
:
: tw/sub2/test.java (package 為 tw.sub2)
: tw/sub2/tw.java (package 為 tw.sub2)
:
: 假設在 tw.sub2.test 裡使用 tw.sub1.test (已使用全名)
: 但因為 tw.sub2 下有 tw 這個 class
: 所以 compiler 會把 tw.sub1.test 的 tw 當成是 tw.sub2.tw
: 然後就抱怨找不到 sub1
:
: 想請問有重新命名之外的解決方法嗎?
: 謝謝
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.112.30.49
: → tkcn:使用的時候直接打全名 "tw.sub1.test" 07/08 17:59
: ^^
: 唔,我在文章裡有解釋, 這個 tw 會被 compiler 視為 tw.sub2.tw
: 所以會找不到 (因為不存在 tw.sub2.tw.sub1.test)
: ※ 編輯: HuangTzHuan 來自: 140.112.30.49 (07/08 18:07)
: → tkcn:你 compile 的方法不正確,先去查一下吧 07/08 18:10
抱歉,可以給點提示嗎?
compile 的指令為:
javac tw/sub2/test.java
如果 sub2/ 下沒有 tw.java,則一切正常
如果 sub2/ 下有 tw.java 會得到如下 error
$ javac tw/sub2/test.java
tw/sub2/test.java:10: cannot find symbol
symbol : class sub1
location: class tw.sub2.tw
tw.sub1.tw t = new tw.sub1.test();
^
tw/sub2/test.java:10: cannot find symbol
symbol : class sub1
location: class tw.sub2.tw
tw.sub1.tw t = new tw.sub1.test();
^
2 errors
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.49
※ 編輯: HuangTzHuan 來自: 140.112.30.49 (07/08 18:21)
→ tkcn:抱歉,你說的沒錯,前面是我沒搞清楚. 目前我不認為有其他解法 07/08 19:12
→ tkcn:spec上的規定寫,若ambiguous時會優先當成type處理 07/08 19:18
→ sbrhsieh:話說回來,通常 package 是小寫開頭,class是大寫開頭 07/08 21:24
→ sbrhsieh:不應有此困擾~~~ 07/08 21:25
推 shiengchyi:另外變數最好也習慣小寫開頭 0.0/ 07/11 15:16