我正在尝试创建一个MulticastLock类型的变量,它是在Android框架中定义的内部类。
但是,我收到一条错误,指出MulticastLock不是WifiManager的成员。
我是否需要在Scala中以不同方式引用内部类?
var multicastLock:android.net.wifi.WifiManager.MulticastLock = null
答案 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