2016-11-18 60 views
-1

開頭我已經看到一些代碼庫,其中有人寫過名稱以「$」開頭的嵌套靜態類?那有什麼意義呢?

class A { 
    int a; 

    static class $B { 
    int b; 
    } 
} 
+0

不是自動生成的。 – nibin012

+0

然後生成一個真實的例子。 – chrylis

+0

相關,可能是間接重複:http://stackoverflow.com/questions/19529603/any-risk-using-a-single-dollar-sign-as-a-java-class-name –

回答

6

沒有意義。 $是一個java名稱的有效字符;沒有什麼特別的。

JLS Chapter 3.8,它定義有效的類名稱的字符(更多或更少的最「非語法」字,第一個字符不是一個數字)甚至專門提醒注意這個特別的情況:

$標誌應該是僅用於機械生成的源代碼,或者很少用於訪問遺留系統上預先存在的名稱。

也請參閱JLS Chapter 6: Names

這只是一個本地命名約定,可能是提醒/向開發人員指出該類是內部類。

雖然這是一種風格的東西,但AFAICT開發者社區的普遍共識是而不是將元數據編碼成名稱。我看到的其他例子是成員變量/參數的前導下劃線,以及可怕的Hungarian notation

儘量讓事情好undecorated名稱。

2

人們一般都沒有自己寫過;這些通常是自動生成的。從JLS 3.8

通過 「Java字母」 包括大寫和小寫ASCII拉丁字母AZ(\ u0041- \ u005a)和AZ(\ u0061- \ u007a),並且,由於歷史原因,ASCII下劃線( _或\ u005f)和美元符號($或\ u0024)。 $符號只能用於機械生成的源代碼,或者很少用於訪問原有系統上預先存在的名稱。

的美元符號是一個合法的字符,但它是一個非常公約看齊,與使用大寫字母作爲類名,不能在普通的代碼中使用它。

極少數人用它來表示一個內部類,但我個人從來沒有一次看到用於任何的$字符也沒攜帶合成標誌,我會用匈牙利語考慮看齊Java中的符號。

2

那是什麼意思?

你將不得不問問編寫代碼的人員的重要性。

然而,從Java語言的角度來看沒有意義;即Java編譯器對美元符號沒有特別的含義。 (這只是另一個合法標識符字符,儘管一個推薦不能使用;請參閱JLS 3.8)。

不過,我嫌疑認爲,美元字符是否是原因:

  • 的代碼已經在一些點從字節碼反編譯。我這樣說是因爲Java編譯器使用A$B作爲在A中聲明的嵌套類B的合成名稱。
  • 自那時起修改/維護它的人/人不知道或不關心標準Java風格約定。

它也可能是(故意的)「本地公約」。

無論哪種方式,大多數Java程序員會發現這令人反感。不要複製它。