我怎样才能返回一个scala"对象"好像它是一个类实例?

时间:2017-07-21 18:53:03

标签: scala

我有一个抽象的超类,有各种无状态实现。似乎要做的是将抽象超类设为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")而不会产生任何不必要的对象。

知道我应该采取哪些不同的做法?我是否应该不再担心过早优化并学会喜欢这个实例?

1 个答案:

答案 0 :(得分:2)

问题不在于可见性,你根本就没有在任何地方定义一个名为UpperTransformer的对象 - 只有一个类。如果您将class UpperTransformer替换为object UpperTransformer,则代码应该可以正常运行。