[問題] 這算是 Java 語法的漏洞嗎?

看板java作者 (邀怪)時間17年前 (2008/11/09 22:09), 編輯推噓5(502)
留言7則, 5人參與, 最新討論串1/1
做個頭腦體操, 看看下面這兩個 class: class Foo { static String name; } class A { static Foo B = new Foo(); static class B { static String name; } } 之後在別處寫到: A.B.name = "abc"; 這樣 compiler 並不會抱怨是 ambiguous, 而是將 A.B.name resolve 成為 A.B.name , 頂多只有個 warning 說 static field 'name' 應該 要以 static reference 去操作, 也就是 Foo.name 會比較好. 糟糕的是, 除非靠 reflection, 否則完全沒有辦法用到 A.B.name 耶? 這樣狀況 compiler 應該當成 ambiguous 比較好吧, 否則這變成是語法的瑕疵, 合乎 Java 語法的程式, 卻有東西完全無法存取得到? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.27.29 ※ 編輯: macbuntu 來自: 220.135.27.29 (11/09 22:11)

11/09 22:21, , 1F
所以 C# 有所限制(聽說的)
11/09 22:21, 1F

11/09 22:22, , 2F
不過我是覺得就不要亂寫就好,不是大問題
11/09 22:22, 2F

11/10 01:28, , 3F
奇怪, 我試了後, 都沒有warning 出現 Orz
11/10 01:28, 3F

11/10 06:04, , 4F
我比較好奇是在 class A 裡面去撞名的意義是?...
11/10 06:04, 4F

11/10 09:23, , 5F
呵, 實務上雖然不會這樣, 但值得注意有這樣的現象
11/10 09:23, 5F

11/16 20:57, , 6F
請參考 JavaPL spec 2nd 的 6.3.2 一節
11/16 20:57, 6F

11/16 20:59, , 7F
6.3.2 Obscured Declaration
11/16 20:59, 7F
文章代碼(AID): #195kyVGs (java)