我有一个抽象的超类,有各种无状态实现。似乎要做的是将抽象超类设为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")
而不会产生任何不必要的对象。
知道我应该采取哪些不同的做法?我是否应该不再担心过早优化并学会喜欢这个实例?
答案 0 :(得分:2)
问题不在于可见性,你根本就没有在任何地方定义一个名为UpperTransformer
的对象 - 只有一个类。如果您将class UpperTransformer
替换为object UpperTransformer
,则代码应该可以正常运行。