Мне нужно поддерживать несколько раскладок клавиатуры в моем приложении.Scala Добавить членов в базовый класс
Это одно решение, но в 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