无法从伴侣对象访问伴侣类的方法
我认为我可以从我的伴侣对象访问伴侣类的每个方法。但我不能?无法从伴侣对象访问伴侣类的方法
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
}
编译器错误: 未发现:价值getTag
我做错了什么?
您正在尝试调用的方法getTag
在object EFCriteriaType
。该对象中没有这样的方法。你可以这样做:
object EFCriteriaType extends EFCriteriaType("text") {
override def toString = getTag
}
因此,使伴侣对象的一种模板。
您可以从同伴对象访问类中通常不可访问的成员,但仍需要让该类的实例访问它们。 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
}
这里私有方法secret
是Foo
的同伴对象访问。由于秘密无法访问,Bar不会编译。
好的。我想我明白。我确实需要一个伴侣类的实例来调用它的一个方法。如果我将_toString_方法移动到伴随班,它会起作用。谢谢! – GarfieldKlon 2012-07-27 12:41:27
我不太清楚你想在这里做什么,而是你需要调用getTag的类的实例:
override def toString(x:EFCriteriaType) = x.getTag
我想重写方法_toString_并简单地返回_tag_。我无法将对象传递给toString,否则它将变成重载。 – GarfieldKlon 2012-07-27 12:30:58
只是细节马修的答案,这是正确的:
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.
要调用给定类中的一员,你需要即使你不这样做,从一个同伴,类(实例对象)
我完全同意@MatthewFarwell的回应。此外,我认为你希望toString方法在类内,而不是伴随对象。 – jeslg 2012-07-27 11:56:56