程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Groovy >> Groovy Tip 33 方法的參數 二

Groovy Tip 33 方法的參數 二

編輯:Groovy

Map參數是我們在Groovy語言的編碼中比較常用的一種參數類型,我們常常會很自然的寫出來如下的 代碼:

t.testMap(a:1)
t.testMap(a:1,b:1)
t.testMap(a:1,b:1,c:1)
new Person(name:'Tom',sex:23)

這些都是Map參數的使用。以此類推,我們也常常希望List參數也有同樣的功能,比如,我們有如下 的一個以List對象為參數的方法:

class Testor2 {
    def testList(List list)
    {
       println list
    }
}

然後,我們寫了如下的測試:

def t = new Testor2()
      t.testList(1,2,3)

我們熱切的期望這樣的代碼能夠正常運行,很可惜的是,上面的代碼會報如下的錯誤:

Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: str.Testor2.testList() is applicable for argument types: (java.lang.Integer, java.lang.Integer, java.lang.Integer) values: {1, 2, 3}
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap (ScriptBytecodeAdapter.java:54)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap (ScriptBytecodeAdapter.java:59)

不過不要灰心,其實,我們的數組參數擁有這樣的功能。比如,我們有如下的一個以數組為參數的方 法:

class Testor2 {

    def testArray(int[] arrs)
    {
       println arrs
    }
}

這樣,我們就可以寫出如下的測試:

def t = new Testor2()
      t.testArray(1,2,3)

運行結果為:

[1, 2, 3]

Groovy語言中的方法還有一個值得注意的變化是動態方法名的現象。比如,我們可以以如下的方式調 用一個方法:

t."function_name"()

這種使用方式我們應該已經司空見慣了。但是,這裡面隱藏著一個比較有意思的問題,就是,我們可 以在方法名中出現"."和"-"這樣的一些字符,這在正常的方法名中是不可能出現 的。

比如,我們有如下的一個方法:

class Testor2 {
    def "a.b"()
    {
       println 'haha'
    }
}

這也是可以正常編譯的。而且我們可以這樣調用它:

def t = new Testor2()
      t."a.b"()

運行結果為:

haha

有了這樣的概念,下次如果我們遇到如下的代碼,就不用驚慌了:

def web = builder.'web-app' {
    builder.'display-name'('Groovy WebApp')
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved