2012-05-16 91 views
2

有沒有人知道我是否可以在對象中注入內部類? 我想寫這樣的事情:我可以注入一個內部類的對象嗎?

@Named 
public class ClassA { 

    @Inject 
    private InnerClass myObject; 

    public class InnerClass extends DefaultImplementation implements Serializable{ 
     public String overriddenMethod() { 
      // do something special 
     } 
    } 
} 

我想是因爲我有我的80%的我用例使用注射默認實現做這些奇怪的事情。但是對於特殊的邏輯,我必須重寫默認實現中的一些方法。

我不想創建額外的類文件,因爲我想重寫兩行代碼而已。

如果我嘗試在我的OpenWebBeans-Contrainer的代碼,我收到以下錯誤:

javax.enterprise.inject.UnsatisfiedResolutionException: Api type [ClassA$InnerClass] is not found with the qualifiers Qualifiers: [@javax.enterprise.inject.Default()] for injection into Field: private ClassA$InnerClass ClassA.myObject

回答

2

內部類的注射應該工作,如果聲明爲「公共靜態」

+0

非常感謝。我意識到我可以注入一個靜態類。但我想擁有一個具有它自己的實例變量的類的單個對象。我認爲靜態類的對象只能有靜態變量和方法。我錯了嗎? –

+0

**錯誤**。 _No-static inner classes_是必須在持有者類的實例中創建的類。這意味着內部類有一個「持有者指針」(可以訪問持有者的變量)。 _靜態內部類classes_獨立於持有者類。 在這兩種情況下都是其他類的類,並且可以有'靜態'和非'靜態'成員或方法。 – lucasvc

0

要簡單地解決你的問題改變你的班級到

public static class InnerClass //... 

這似乎有點不直觀,但Java靜態類與c#等語言大不相同。在Java中,靜態類只用於你所處的情況,你想要利用嵌套類,而不必首先創建外部類的實例。在java中創建靜態類實際上是無效的,而不是嵌套類。

查看此答案的更多詳情:Why are you not able to declare a class as static in Java?

相關問題