让我们从以下示例开始:
class Foo {
override def toString = ???
}
val instanceName = new Foo()
println(instanceName) // Should print "instanceName"
使用ScalaReflectionneneneba API(或任何其他方法),如何在运行时获得类的实例名称?如何从AST获得这些信息?
同样的问题,但对于Java来说:Java反射:如何获得变量的名称?
对不起,这个问题真的没有意义。我会尽力解释原因。
想象一下,存在着合适的魔法,可以让toString随心所欲。现在让我们再添加几行:
class Foo {
override def toString = ???
}
val instanceName = new Foo()
val larry = instanceName
val moe = larry
val curly = moe
println(instanceName.toString)
您希望打印什么--instanceName?拉里?莫?卷曲的所有这些标识符都绑定到同一个对象。当toString执行时,用于引用对象的变量就不见了——对象引用在this
中,仅此而已
一个对象不知道哪些标识符(表示堆栈上甚至其他对象中的数据)引用了它。toString
方法不仅不能访问变量的名称,而且实际上没有一个变量可以让它知道。