Can't access method of companion class from companion object

You are trying to call the method getTag in object EFCriteriaType. There is no such method in that object. You could do something like:

object EFCriteriaType extends EFCriteriaType("text") {
  override def toString = getTag
}

Thus making the companion object a kind of template.

You can access members not normally accessible in a class from a companion object, but you still need to have an instance of the class to access them. E.g:

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
}

Here the private method secret is accessible from Foo's companion object. Bar will not compile since secret is inaccessible.


I'm not quite sure what you're trying to do here, but you need to call getTag on an instance of the class:

override def toString(x:EFCriteriaType)  = x.getTag

Just to detail Matthew answer, which is the right one:

A companion object is a singleton but a class is not. a singleton. The companion object can access the methods of the class in the sense that a private member of the class C can be called in its companion object C.

To call a member of a given class, you need an instance of that class (even if you are not doing that from a companion object)