Groovy中有找到被調用方法的名稱的方法嗎?在Groovy中查找方法的名稱
def myMethod() {
println "This method is called method " + methodName
}
這與鴨子打字相結合將允許非常簡潔(可能難以閱讀)的代碼。
Groovy中有找到被調用方法的名稱的方法嗎?在Groovy中查找方法的名稱
def myMethod() {
println "This method is called method " + methodName
}
這與鴨子打字相結合將允許非常簡潔(可能難以閱讀)的代碼。
不,與Java一樣,沒有原生的方法。
您可以編寫AST轉換,以便您可以註釋該方法,並且可以在該方法內設置局部變量。
或者你也可以做到這一點產生一個堆棧跟蹤,並與像找到正確的StackTraceElement的好老的Java方法:
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()
Groovy支持攔截通過invokeMethod
機制的GroovyObject的所有方法的能力。
您可以覆蓋invokeMethod
,它將基本上攔截所有方法調用(攔截對現有方法的調用,此類還必須實現接口)。
class MyClass implements GroovyInterceptable {
def invokeMethod(String name, args) {
System.out.println("This method is called method $name")
def metaMethod = metaClass.getMetaMethod(name, args)
metaMethod.invoke(this, args)
}
def myMethod() {
"Hi!"
}
}
def instance = new MyClass()
instance.myMethod()
此外,您還可以添加此功能到現有的類:
Integer.metaClass.invokeMethod = { String name, args ->
println("This method is called method $name")
def metaMethod = delegate.metaClass.getMetaMethod(name, args)
metaMethod.invoke(delegate, args)
}
1.toString()
看看這個線程。 http://stackoverflow.com/questions/9540678/groovy-get-enclosing-functions-name – 2012-04-11 09:57:20
謝謝,我還沒有找到這一個! – pchronz 2012-04-11 19:26:56