无法从伴随对象访问伴随类的方法

Gar*_*lon 8 methods scala object

我以为我可以从我的伴侣对象访问伴侣类的每个方法.但我不能?

class EFCriteriaType(tag:String) extends CriteriaType
{
  // implemented method of CriteriaType
  def getTag = this.tag   
}

object EFCriteriaType
{
  var TEXT: CriteriaType = new EFCriteriaType("text")

  override def toString = getTag
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:找不到:值getTag

我做错了什么?

Emi*_*l H 9

您正在尝试调用的方法getTagobject EFCriteriaType.该对象中没有这样的方法.你可以这样做:

object EFCriteriaType extends EFCriteriaType("text") {
  override def toString = getTag
}
Run Code Online (Sandbox Code Playgroud)

从而使伴侣对象成为一种模板.

您可以从协同对象访问通常不在类中访问的成员,但您仍需要具有该类的实例才能访问它们.例如:

class Foo {
  private def secret = "secret"
  def visible = "visible"
}
object Foo {
  def printSecret(f:Foo) = println(f.secret) // This compiles
}
object Bar {
  def printSecret(f:Foo) = println(f.secret) // This does not compile
}
Run Code Online (Sandbox Code Playgroud)

这里的私有方法secret可以从Foo同伴对象访问.由于秘密无法访问,Bar不会编译.


Mat*_*ell 5

我不太确定你在这里尝试做什么,但你需要在类的实例上调用getTag:

override def toString(x:EFCriteriaType)  = x.getTag
Run Code Online (Sandbox Code Playgroud)