我有以下类型
class Translator[To <: Language] { ... }
abstract class Language
object English extends Language
object German extends Language
有没有办法从Translator
val
或English
中German
实例化val lang = if (someCondition) English else German
val translator = new Translator[classOf[lang]]
?
我正在寻找类似以下内容(不起作用):
{{1}}
答案 0 :(得分: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
但它与你期望的设计完全不同......
答案 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)
只需像Translator
或German
那样实例化English
:
new Translator[German.type]
编辑:
或来自val
val x = German
new Translator[x.type]