reflection - 在 Groovy 中找出方法的名称

标签 reflection groovy introspection

Groovy 中有没有办法找出被调用方法的名称?

def myMethod() {
    println "This method is called method " + methodName
}

这与鸭子类型相结合将允许非常简洁(并且可能难以阅读)的代码。

最佳答案

不,与 Java 一样,没有本地方法可以做到这一点。

您可以编写一个 AST 转换,以便您可以注释该方法,这可以在该方法内设置一个局部变量。

或者,您可以使用生成堆栈跟踪的旧 Java 方式,并使用以下内容找到正确的 StackTraceElement:

import static org.codehaus.groovy.runtime.StackTraceUtils.sanitize

def myMethod() {
  def name = sanitize( new Exception().fillInStackTrace() ).stackTrace.find {
    !( it.className ==~ /^java_.*|^org.codehaus.*/ )
  }?.methodName

  println "In method $name"
}

myMethod()

关于reflection - 在 Groovy 中找出方法的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10103495/

相关文章:

c# - 从抽象类反射(reflect)实现的私有(private)方法?

.net - 有人创建了一个开源动态 .NET 类来公开另一个类上的私有(private)函数/属性吗?

python - 被调用者是否有可能强制其调用者在 python 中返回?

java - Gradle Plugin 如何将方法添加到特定 block ?

objective-c - 在未公开时访问父类(super class)中的方法

使用装饰器进行 Python 日志记录

java - 流按运行时参数排序

.net - GetCustomAttributes() 是否保留 .NET 中的属性顺序?

groovy - 为什么对于这个常规映射,对 containsKey() 的调用失败?

gradle - groovy block 注释和字符串中的特殊字符