使用Scala中具有变量类型的类型参数实例化类

时间:2012-07-02 13:57:14

标签: scala type-parameter

我有以下类型

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

有没有办法从Translator valEnglishGerman实例化val lang = if (someCondition) English else German val translator = new Translator[classOf[lang]]

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

{{1}}

3 个答案:

答案 0 :(得分:5)

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

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

使用以下类和对象:

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

只需像TranslatorGerman那样实例化English

new Translator[German.type]

编辑:

或来自val

val x = German
new Translator[x.type]