scala - 如何在 Scala 中使用泛型

标签 scala templates generics parameters components

我已经编码了这个组件,以在不同的语言之间切换:

import scala.collection.mutable.Map

sealed trait Language
case object English extends Language {
  val messages: Map[String, String] =
    Map("M01" -> "Ready for cooking - press START",
      "M02" -> "Close the door to start cooking")
}
case object French extends Language {
  val messages: Map[String, String] =
    Map("M01" -> "Pret pour la cuisson - presse START",
      "M02" -> "Fermez la porte pour commencer la cuisson")
}

class Lang {

  //The default Language
  private var language: Language = English

  def chosen(lang: Language) = language = lang

  def displayMessage(msg: String) = language match {
    case English => English messages msg
    case French => French messages msg 
  }

}

我关心的是如何使用参数化来构建这样的组件,然后使用为其参数指定的不同语言来配置它?

最佳答案

我认为在这种情况下你真的不需要泛型。

另外...你的设计感觉有些不对劲。无论如何...如果您认为您有泛型的用例...您可以这样做。

稍微改变一下你的特质

sealed trait Language {
  val messages: Map[ String, String ]
}

现在像这样定义你的泛型类,

class Lang[ A <: Language ]( var language: A = English ) {

  def chosen( lang: A ): Unit = {
    language = lang
  }

  def displayMessage(msg: String): Unit = {
    language messages msg 
  }

}

关于scala - 如何在 Scala 中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531913/

相关文章:

Scala 相当于在 Java 中组合泛型类型?

如果两个模板函数都匹配参数列表,C++ 将调用哪个模板

c# - 匿名类的通用列表

c# - 字典对象性能

Scala-奇怪的编译错误(方法的多个重载替代定义默认参数)

scala - 我可以在 Scala 中创建一个使用不同 equals/hashCode/compare 实现的集合吗?

scala - 如何动态设置电梯片段的参数?

python - 在 Django 应用程序中提供静态网页的最佳方式是什么?

c++ - 在没有模板特化的情况下更改函数的返回类型。 C++

generics - 接口(interface)的嵌套泛型类型