簡體   English   中英

如何使用反射在Groovy中獲取Java類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM