问题
In Scala, I can declare an object like so:
class Thing
object Thingy extends Thing
How would I get "Thingy"
(the name of the object) in Scala?
I've heard that Lift (the web framework for Scala) is capable of this.
回答1:
Just get the class object and then its name.
scala> Thingy.getClass.getName
res1: java.lang.String = Thingy$
All that's left is to remove the $
.
EDIT:
To remove names of enclosing objects and the tailing $
it is sufficient to do
res1.split("\\$").last
回答2:
If you declare it as a case object
rather than just an object
then it'll automatically extend the Product trait and you can call the productPrefix
method to get the object's name:
scala> case object Thingy
defined module Thingy
scala> Thingy.productPrefix
res4: java.lang.String = Thingy
回答3:
I don't know which way is the proper way, but this could be achieved by Scala reflection:
implicitly[TypeTag[Thingy.type]].tpe.termSymbol.name.toString
来源:https://stackoverflow.com/questions/12995250/in-scala-how-do-i-get-the-name-of-an-object-not-an-instance-of-a-class