[英]Java: multiple inner classes generated from Singleton Holder pattern
我有一個非常簡單的單例,它使用了holder模式(我只顯示了模式,沒有顯示其他細節):
public class Foo
{
private static class FooHolder
{
private static final Foo INSTANCE = new Foo();
}
public static Foo getInstance()
{
return FooHolder.INSTANCE;
}
}
當我通過Eclipse 1.6 compiler
編譯此類時,它將生成兩個類: Foo.class
和Foo$FooHolder.class
。 但是,當我通過Maven
和JDK 1.6 compiler
對其進行JDK 1.6 compiler
,它將生成一個附加類: Foo$1.class
,該類幾乎是空的。
我試圖理解為什么會這樣。 由於限制,我無法提供有關代碼的更多詳細信息。
盡管Java允許訪問同一.java
中其他類的私有成員,但JVM不支持此功能。
相反,編譯器生成的代碼將通過生成的訪問器方法(例如access $ 010()或生成的子類)對這些成員進行秘密訪問。 每個編譯器的確切實現方式是實現細節。
我很確定Oracle JDK 7不會這樣做。
順便說一句,使用枚舉代替世界更簡單,創建更少的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.