2011-06-13 29 views
6

Java用於解析虛線標識符的規則是什麼?Java分析虛線標識符

例如:

import Foo.Bar; 

class Foo 
{ 
    public static class Bar 
    { 
    }; 
}; 

現在,Foo.Bar可以指導入的類Bar或在源代碼中定義的一個。這種歧義如何解決?

我已經試過這一個案例,所以我知道在實踐中會發生什麼,但我正在尋找更多的東西;我想知道基本規則。例如,如果源文件中存在Foo.Bar,我仍然可以參考導入的類Foo.Bar.Baz?如果Foo.Bar是一個包,也是一個類,該怎麼辦?如果編譯器在最接近的Foo中找不到Foo.Bar,它只是放棄,還是繼續尋找其他Foo s,直到它用完或發現匹配?

(順便說一句,我發現在語言規範的相關位。它沒有太大的幫助...)

+2

如果所有代碼都遵循推薦的Java命名約定,那麼永遠不會出現這種情況:程序包名稱始終完全小寫,類名始終以大寫字母開頭。如果你的代碼不遵循這個約定,那麼你在語言規範中看到的就是你所得到的。 – 2011-06-13 14:29:21

+0

是的,但不是我在問什麼...... – 2011-06-13 15:03:41

+0

沒錯,這就是爲什麼我的評論是評論,而不是答案。 ;-) – 2011-06-13 15:16:20

回答

4

要解決一個奇怪的衝突是這樣,Java編譯器遵循它使用同樣的規則解決局部變量名稱與實例字段名稱衝突的情況 - 它使用「最近」的聲明。在這種情況下,本地班級Foo將勝過導入的班級。

當導入兩個相同名稱的類時也會發生衝突。最常見的例子是java.util.Datejava.sql.Date。如果您已將它們兩者都導入到課堂中,則必須使用完全限定名稱引用它們。

+0

-1忽略了這個問題 - 「我已經嘗試了這一個案例,所以我知道實際中會發生什麼,但我正在尋找更多的東西,我想知道基本規則。」 – Zach 2011-06-13 14:30:25

+0

@Zack OK - 回答您的問題,以澄清確切的衝突 – Bohemian 2011-06-13 14:36:44

+0

downvote removed。謝謝! – Zach 2011-06-13 14:55:43