groovy類、構造函數、方法


數據類型:groovy支持Java語言規范定義的數據類型
類:與Java類的主要區別
1、沒有可見修飾符的類或者方法是自動公開的
2、類不需要與源文件定義相同名稱,但是默認規定定義一樣
3、一個源文件包含一個或者多個類,但是如果文件包含不再類中的任何代碼將視為腳本
4、腳本只是具有一些特殊約定的類
5、不要在腳本中定義與腳本源文件相同名稱的類定義
6、必須用abstract關鍵字修飾抽象方法和類
7、可以使用as運算符使對象的實例在運行時實現接口

/**
 * Created by Jxy on 2018/12/21 7:43
 * 三種構造函數的使用
 * Groovy方法、參數
 */
class PersonConstructor {
    String name
    Integer age

    PersonConstructor(name, age) {
        this.name = name
        this.age = age
    }
}

def person1 = new PersonConstructor('Marie', 1)
def person2 = ['Marie', 2] as PersonConstructor
PersonConstructor person3 = ['Marie', 3]
/*
方法基本的定義
 */
def someMethod() { 'method called' }//聲明沒有返回值類型並且沒有參數的方法
String anotherMethod() { 'another method called' }//具有顯式返回類型且無參數的方法
def thirdMethod(param1) { "$param1 passed" }//沒有定義類型的參數的方法
static String fourthMethod(String param1) { "$param1 passed" }//帶String參數的靜態方法
/*
方法的命名參數
 */
def foo(Map args) { "${args.name}: ${args.age}" }
def string = foo(name: 'Marie', age: 1)
println(string)//Marie: 1
/*
方法參數混合命名和位置參數
Mixing named and positional parameters
map必須放在參數第一個位置不然會報異常:groovy.lang.MissingMethodException
 */
def foo(Map args, Integer number) { "${args.name}: ${args.age}, and the number is ${number}" }
foo(name: 'Marie', age: 1, 23)
foo(23, name: 'Marie', age: 1)

/*
如果map沒有在第一個參數位置則應該使用顯示map參數替換命名參數
 */
def foo(Integer number, Map args) { "${args.name}: ${args.age}, and the number is ${number}" }
foo(23, [name: 'Marie', age: 1])

/*
默認參數
 */
def foo(String par1, Integer par2 = 1) { [name: par1, age: par2] }
assert foo('Marie').age == 1
/*
可變參數
可變參數與重載
 */
def foo(Object... args) { 1 }
def foo(Object x) { 2 }
assert foo() == 1
assert foo(1) == 2
assert foo(1, 2) == 1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM