作者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)
1F:→ tkcn:抱歉,你说的没错,前面是我没搞清楚. 目前我不认为有其他解法 07/08 19:12
2F:→ tkcn:spec上的规定写,若ambiguous时会优先当成type处理 07/08 19:18
3F:→ sbrhsieh:话说回来,通常 package 是小写开头,class是大写开头 07/08 21:24
4F:→ sbrhsieh:不应有此困扰~~~ 07/08 21:25
5F:推 shiengchyi:另外变数最好也习惯小写开头 0.0/ 07/11 15:16