使用类型参数实例化类,并在 Scala 中使用变量的类型



我有以下类型

class Translator[To <: Language] { ... }
abstract class Language
object English extends Language
object German extends Language

有没有办法从类型 EnglishGermanval实例化Translator

我正在寻找类似以下内容的内容(不起作用):

val lang = if (someCondition) English else German
val translator = new Translator[classOf[lang]]

问题是EnglishGerman都不是类。你确定这里需要通用性吗?也许构图就足够了。一个可能的解决方案是:

val lang = Translator(if (someCondition) English else German)

具有以下类和对象:

case class Translator(l: Language)
trait Language
object English extends Language
object German extends Language

但它的设计与你预期的完全不同......

在翻译

构造函数中使用语言作为类型参数:

class Translator[To <: Language](lang:To) {...}
abstract class Language
object English extends Language
object German extends Language
new Translator(German)
res7: Translator[German.type] = Translator@8beab46
// using class instead of object:
class Italian extends Language
new Translator(new Italian)
res9: Translator[Italian] = Translator@6bc22f58

只需使用如下所示的GermanEnglish类型实例化Translator

new Translator[German.type]

编辑:

或来自val

val x = German
new Translator[x.type]

最新更新