私は様々なステートレスな実装を持つ抽象スーパークラスを持っています。抽象スーパークラスをclass
にして、各実装をobject
にすることが、私がそれぞれの必要があるためだと思います。スカラ "オブジェクト"をクラスインスタンスのように返すにはどうしたらいいですか?
これは、おもちゃの一例であるが、それは私が取得していますコンパイルエラーを示しています
// Tramsformer.scala
class Transformer {
def transform(value : String) : String
}
object Transformer {
getTransformer(String : name) : Transformer = {
name match {
case "upper" => UpperTransformer
// I'm getting "Cannot Resolve Symbol" on UpperTransformer,
// even though they're in the same package.
case _ => throw new IllegalArgumentException("...")
}
}
}
// ---
// UpperTransformer.scala is in the same package
object UpperTransformer extends Transformer {
override def transform(vlaue : String) = foo.toUpperCase()
}
私は本当にここ(のdataProvider、desiredAction)上の動的ディスパッチのいくつかの並べ替えのために撮影しています。
次に、不要なオブジェクトを作成せずにTransformer.getTransformer("upper").transform("stack-overflow")
を呼び出すクラスもあります。
私は別のやり方を考えていますか?早すぎる最適化について心配するのを止め、インスタンスを愛することを学ぶべきですか?
おっと、私の質問でタイプミス。それはすでに「オブジェクト」です。 –
@EdBrannin他のタイプミス(Transformerクラスの 'abstract'が' value'と 'foo'、' String:name')を修正した後、あなたが投稿したコードは 'クラス '。したがって、実際の問題が何であるかを再考する必要があります(また、再現可能なコンパイル可能なコードサンプルが実際に問題をコンパイルして再現することを確認してください)。 – sepp2k
ダーン、申し訳ありません。私は今日後で既存のコードを修正することでそれをリメイクします。 –