我有以下类型
class Translator[To <: Language] { ... }
abstract class Language
object English extends Language
object German extends Language
有没有办法从类型 English
或 German
的val
实例化Translator
?
我正在寻找类似以下内容的内容(不起作用):
val lang = if (someCondition) English else German
val translator = new Translator[classOf[lang]]
问题是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
但它的设计与你预期的完全不同......
在翻译
构造函数中使用语言作为类型参数:
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
只需使用如下所示的German
或English
类型实例化Translator
:
new Translator[German.type]
编辑:
或来自val
val x = German
new Translator[x.type]