嗯,你是對的,在類名作品中使用$
。 Eclipse抱怨說它違反了慣例,但是,如果你確定,你可以這樣做。
與使用$
在於$
是在類層次結構用於指示嵌套類....例如,包含文件A.java問題(常規):
class A {
class SubA {
}
}
會得到編譯成兩個文件:
- 的A.class
- 一個$ SubA.class
這就是爲什麼,儘管$
的作品,這是不明智的,因爲解析的罐子可能會更加困難......你運行碰撞兩個階級,導致其他問題
的風險
編輯,我剛剛做以下兩個Java文件的測試(在默認包)
public class A {
private static final class SubA {
public String toString() {
return "I am initializing Nested SUBA";
}
}
private static final SubA sub = new SubA();
public A() {
System.out.println("What is " + sub.toString());
}
}
public class A$SubA {
@Override
public String toString() {
return "I am A$SubA";
}
}
public class MyMain {
public static void main(String[] args) {
System.out.println(new A());
System.out.println(new A$SubA());
}
}
和代碼將無法編譯.....
兩個問題,A型$蘇巴已經定義,和ca不要通過二進制名稱引用嵌套類A $ SubA。
它通常是一個壞主意,用類,方法和變量奇怪的名字。在Java小於其他語言(C/C++),但它仍然不是一個好主意,我想。班級名稱應簡要說明其用途。 –
無論如何,我認爲這是好的,如果你知道自己在做什麼。美元沒有特別的意義。它是用來生成嵌套類明確的名稱。因爲沒有兩個類可以在同一個包中存在具有相同名稱的,使用包含類名作爲前綴保證有嵌套不同的第一級類內的類之間沒有重疊。 –
@Pshemo,認真我想我應該公開更多的上下文以避免像你發佈的那樣的評論。我想要做的事情是克服Java不支持純函數的事實,'_'或'$'是放置一個名稱空間來封裝一些非常通用的概念(類/靜態方法)。我也沒有一個好的名字,也不希望lib用戶輸入太多的東西來引用這個名字空間。看看https://github.com/greenlaw110/java-tool/blob/master/src/main/java/org/osgl/_.java –