1

私は次のタイプを持っています

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]]
4

3 に答える 3

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

思っていたのとはかなり違うデザインですが…

于 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 に答える