2013-09-26 57 views
0

如何創建我的實例?帶泛型的單例子參數

我總是收到編譯錯誤。

描述資源路徑位置類型 不能使靜態參考非靜態類型的組件ComponentManager.java

package component; 

public class ComponentManager<COMPONENT extends Component> { 

private static ComponentManager<COMPONENT> instance = new ComponentManager<COMPONENT >(); 

private ComponentManager() { 

} 

public static ComponentManager<?> getInstance() { 
    return instance; 
} 

} 
+0

如果您收到編譯錯誤並希望得到我們的幫助,請考慮發佈錯誤消息的完整內容。 –

+0

您似乎可能缺少一個導入語句,除非您有自己的Component類。 –

+1

我從你的代碼中獲取了你想要N個單例,每個單元用於'Component'的子類?如果是這種情況,由於**類型的擦除**而不起作用。 – SJuan76

回答

0

new ComponentManager()getInstance()方法中調用構造函數,如果instance爲空,否則返回instance

public class ComponentManager { 

    private static ComponentManager instance; 

    private ComponentManager() { 

    } 

    public static ComponentManager getInstance() { 
     if (instance != null) { 

     } else { 
      instance = new ComponentManager(); 
     } 
     return instance; 
    } 

} 
+0

我想要做我的getInstance()沒有條件。 – user1902062

1

您的語法在聲明和實例化上是錯誤的。像這樣創建「實例」:

private static ComponentManager<? extends Component> instance = new ComponentManager< >(); 
+0

它的工作原理。謝謝! – user1902062

+0

它應該也適用於我,至少對於編譯。 Java 7添加了有限類型推斷功能。 http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-in​​ference-generic-instance-creation.html – daveed007

+0

@ daveed007。啊!抱歉。這是我的錯。它編譯好。 –