2012-01-09 70 views
3

我想創建一個類型爲MulticastLock的變量,它是在Android框架內定義的內部類。Scala內部類 - 不是成員

但是,我收到一個錯誤,指出MulticastLock不是WifiManager的成員。

我需要在Scala中以不同的方式引用內部類嗎?

var multicastLock:android.net.wifi.WifiManager.MulticastLock = null 

回答

6

如果WifiManager類,那麼你需要使用#,而不是.。但請注意,這不僅僅是一個空閒的句法差異;當你有一個外部類的內部類時,它可能很重要其外部類來自哪個實例#提醒您有這個新問題(X#Y是屬於任何副本的內部類的類型,而不是特定的副本;如果xX的實例,則x.Y是內部類的類型該特定實例)。這裏還有其他一些問題涉及內部類的不同用例(例如Referring to the type of an inner class in Scala)。

+0

完美,感謝您的補充說明和鏈接。 – Steve 2012-01-09 16:54:38

3

簡而言之,是的 - 你要使用#,而不是.

class A { class B } 
val a : A.B = null 

//錯誤:未發現:值A

val a : A#B = null 

//工作

.語法用於指代外部類的特定實例的成員:

val a = new A 
val b : a.B = null