2015-03-02 42 views
2

我已經定義像這樣(僞代碼)的類:播放框架(2.3.5) - 模板訪問內部類失敗

package com.some.namespace 

public class SomeClass { 

    protected SomeClass() {} 

    // stuff... 

    public class SomeInnerClass { 

     public SomeInnerClass() {} 

     // more stuff (accesses instance variables from SomeClass)... 

    } 

} 

然後在我的模板我使用可重複使用的塊定義像這樣:

@doSomething(val: com.some.namespace.SomeClass.SomeInnerClass) = { 

    // even more stuff... 

} 

但我得到的錯誤:

type SomeInnerClass is not a member of object com.some.namespace.SomeClass

我不是能夠在模板中訪問內部類或者是這個suppos編輯工作? (如果它應該工作,我可能需要張貼我的實際代碼)

+1

你的內部類不需要是靜態的嗎?如果是這樣,它應該像任何其他課程一樣工作。 – Mikesname 2015-03-02 21:55:47

+0

我不這麼認爲,'SomeClass'是我在視圖中訪問的一個單例,它有一個'SomeInnerClass'類的列表,我通過getter獲取並傳遞給for循環中的可重用塊。事實上,如果我讓內部類是靜態的,它會破壞我的代碼,因爲'SomeClass'被要求是一個實例,因此'SomeInnerClass'不需要(或者想)是靜態的,因爲它從'SomeClass'中訪問實例變量班,不是? – Neilos 2015-03-02 22:01:42

+0

感謝您的編輯@Mikesname我完全錯過了。 – Neilos 2015-03-03 00:26:17

回答

3

它應該工作,但由於SomeInnerClass依賴類型,即依賴於你單身在外的類實例,你需要把它寫,如:

@doSomething(value: com.some.namespace.SomeClass#SomeInnerClass) = { 
    // even more stuff... 
} 

SomeClass#SomeInnerClass語法Scala中意味着,依稀,一個SomeInnerClass從的SomeClass任何實例。有關更多詳細信息,請參見this answer

如果內部類是靜態,但是,您當前的SomeClass.SomeInnerClass語法將是要走的路。

+0

100%正確。謝謝。 – Neilos 2015-03-03 00:24:42