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