case class FirstCC {
def name: String = ... // something that will give "FirstCC"
}
case class SecondCC extends FirstCC
val one = FirstCC()
val two = SecondCC()
我怎样才能从one.name
和two.name
"SecondCC"
"FirstCC"
?
case class FirstCC {
def name: String = ... // something that will give "FirstCC"
}
case class SecondCC extends FirstCC
val one = FirstCC()
val two = SecondCC()
我怎样才能从one.name
和two.name
"SecondCC"
"FirstCC"
?
def name = this.getClass.getName
或者,如果你只想要名,不带包装:
def name = this.getClass.getSimpleName
更多信息,请参阅的java.lang.Class的文档。
但是请注意,'getSimpleName'有时会抛出'java.lang.InternalError:格式错误的类名',例如在对象的类上调用它时。 – pr1001 2013-05-22 13:21:00
由于1.5你也可以使用'getCanonicalName' – Benoit 2014-05-22 09:40:52
getSimpleName和getCannonicalName仍然是越野车,有一个持续的票。 https://issues.scala-lang.org/browse/SI-2034(以及重复封闭问题https://issues.scala-lang.org/browse/SI-5425) – Lucas 2014-11-11 15:24:03
class Example {
private def className[A](a: A)(implicit m: Manifest[A]) = m.toString
override def toString = className(this)
}
这个(2.8-only)方法比'this.getClass.getName'有什么好处? – pr1001 2010-04-16 22:43:05
@ pr1001如果您有它们,它将保留类型参数。 – 2010-04-16 23:40:59
有没有任何方法来检索类名称而不包含它的部分(就像'getSimpleName'的情况一样)?我发现你的答案是非常好的方法来克服java.lang.InternalError:在嵌套对象的情况下出现格式错误的类名异常 – 2014-01-23 14:14:08
可以使用的情况下阶级的财产productPrefix
:
case class FirstCC {
def name = productPrefix
}
case class SecondCC extends FirstCC
val one = FirstCC()
val two = SecondCC()
one.name
two.name
注: 如果传递到斯卡拉2.8延伸的情况下,类已被否决,你必须不能忘记左右父()
不case类的toString方法有其名称(参数)? – 2010-04-16 22:26:51
'FirstCC.toString'返回''“' –
pr1001
2010-04-16 22:29:46
通过你可能是指'one.toString' ... – pr1001 2010-04-16 22:46:13