我需要在我的应用程序中支持多个键盘布局。Scala将成员添加到基类
这是一个解决方案,但在斯卡拉我怀疑有一个更好的方法可以让我直接使用KeyLayout
变量,例如输入KeyLayout.KEY_HOME
而不是get_keycodes(12)("KEY_HOME")
。这可能吗?如果我像下面的代码一样使用Map,那么我的其他代码将不断检查我想要使用的每个关键代码实际上是否存在,代码如get_keycodes(12).contains("KEY_HOME")
。这将是好得多,如果get_keycodes(12)
返回与多家val KEY_FOO = KeyCode(x)
项目的对象,这样你就可以做的东西一样get_keycodes(12).KEY_HOME
并让编译器保证,这是去上班
case class KeyCode(key: Int)
object `KeyLayout_v12` extends KeyLayout {
val keys = Map("KEY_HOME" -> KeyCode(0x007a))
}
object `KeyLayout_v15.2` extends KeyLayout {
val keys = Map("KEY_HOME" -> KeyCode(0x003a))
}
class KeyLayout
object KeyLayout {
// Gets the default keycodes for version you are using
def getKeycodes(version: Double): Map[String, KeyLayout] = androidVersion match {
case 12 => `KeyLayout_v12`.keys
case 15.2 => `KeyLayout_v15.2`.keys
case _ => {
info(s"Unknown $version, returning keycodes for 12")
`KeyLayout_v12`.keys
}
}
}
我觉得类型类是你需要什么(编辑我的答案) – dk14 2014-09-21 07:07:16