【发布时间】:2012-01-09 16:38:53
【问题描述】:
我正在尝试创建一个MulticastLock 类型的变量,它是在Android 框架中定义的一个内部类。
但是,我收到一条错误消息,指出 MulticastLock 不是 WifiManager 的成员。
我需要在 Scala 中以不同的方式引用内部类吗?
var multicastLock:android.net.wifi.WifiManager.MulticastLock = null
【问题讨论】:
我正在尝试创建一个MulticastLock 类型的变量,它是在Android 框架中定义的一个内部类。
但是,我收到一条错误消息,指出 MulticastLock 不是 WifiManager 的成员。
我需要在 Scala 中以不同的方式引用内部类吗?
var multicastLock:android.net.wifi.WifiManager.MulticastLock = null
【问题讨论】:
如果WifiManager 是一个类,那么您需要使用# 而不是.。但请注意,这不仅仅是一个闲置的句法差异;当你有一个外部类的内部类时,它来自外部类的哪个实例可能很重要。 # 提醒您注意存在这个新问题(X#Y 是属于任何副本的内部类的类型,而不是特定副本;如果 x 是 X 的实例,则 @ 987654329@ 是该特定实例的内部类的类型)。这里还有其他问题涉及内部类的不同用例(例如Referring to the type of an inner class in Scala)。
【讨论】:
简而言之,是的 - 您需要使用 # 而不是 .:
class A { class B }
val a : A.B = null
// 错误:未找到:值 A
val a : A#B = null
// 有效
. 语法用于引用外部类的特定实例的成员:
val a = new A
val b : a.B = null
【讨论】: