[英]How to get java class in groovy using reflection
我有一個普通的腳本,我想從中訪問Java類的靜態方法。 Java類和方法的名稱將輸入到groovy中。 我將讀取類和方法的名稱,並按如下方式調用:
"$apiClass"."$apiMethod"("UTC")
我是新手,不知道如何有效地使用反射。 下面是代碼:
def exp="[MyDateUtil:getFirstDate](UTC)"
def m=exp=~ /(?<=\[).+?(?=\])/
assert m instanceof Matcher
def apiDef
while(m.find()) {
apiDef =m.group()
}
def (apiClass, apiMethod) = apiDef.split(":")
def output = "$apiClass"."$apiMethod"("UTC")`
我以為下面的線可以用,但是不能上課
def output = "$apiClass"."$apiMethod"("UTC")
如果我僅給出方法名稱作為變量,則可以正常工作:
def output = MyDateUtil."$apiMethod"("UTC")
您需要使用完全限定的類名,並且還要確保類加載器已經加載了該類,這意味着您已經在導致該類加載的其他上下文中引用了該類。
// groovysh session
groovy:000> dateClass = Class.forName("java.util.Date")
===> class java.util.Date
groovy:000> x=dateClass.invokeMethod("newInstance", null)
===> Tue Jul 16 08:12:51 PDT 2019
groovy:000> x
===> Tue Jul 16 08:12:51 PDT 2019
// or
groovy:000> dateClass."newInstance"()
===> Tue Jul 16 08:24:02 PDT 2019
// or
groovy:000> dateClass."newInstance"(8456245)
===> Wed Dec 31 18:20:56 PST 1969
// also
groovy:000> ni="newInstance"
===> newInstance
groovy:000> dateClass."${ni}"()
===> Tue Jul 16 08:27:45 PDT 2019
groovy:000> dateClass."${ni}"(8456245)
===> Wed Dec 31 18:20:56 PST 1969
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.