1

我有以下类型

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

有没有办法TranslatorvaltypeEnglish或实例化German

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

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

3 回答 3

5

问题是既不是课程English也不German是课程。您确定在这里需要泛型吗?也许组合就足够了。一个可能的解决方案是:

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

具有以下类和对象:

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

但它的设计与你想象的完全不同......

于 2012-07-02T14:05:26.177 回答
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
于 2012-07-02T14:07:23.990 回答
0

只需Translator使用以下类型GermanEnglish如下实例化:

new Translator[German.type]

编辑:

或从一个val

val x = German
new Translator[x.type]
于 2012-07-02T14:35:14.040 回答