斯卡拉内部类 - 不是会员

时间:2012-01-09 16:38:53

标签: android scala

我正在尝试创建一个MulticastLock类型的变量,它是在Android框架中定义的内部类。

但是,我收到一条错误,指出MulticastLock不是WifiManager的成员。

我是否需要在Scala中以不同方式引用内部类?

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

2 个答案:

答案 0 :(得分:6)

如果WifiManager,那么您需要使用#而不是.。但请注意,这不仅仅是一种空闲的句法差异;当你有一个外部类的内部类时,它可能与它来自哪个外部类的实例有关。 #提醒您存在这个新问题(X#Y是属于任何副本的内部类的类型,而不是特定副本;如果x是一个实例, X,然后x.Y是该特定实例的内部类的类型。此处还有其他问题涉及内部类的不同用例(例如Referring to the type of an inner class in Scala)。

答案 1 :(得分: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