named parameters with default values in groovy

前端 未结 1 1990
没有蜡笔的小新
没有蜡笔的小新 2021-02-07 00:51

Is it possible to have named parameters with default values in groovy? My plan is to make a sort of object factory, which can be called with no arguments at all in order to get

相关标签:
1条回答
  • 2021-02-07 01:22

    Groovy does that for you by default (map constructor). You would not need a factory method. Here is an example

    import groovy.transform.ToString
    
    @ToString(includeFields = true, includeNames = true)
    class Foo{
        String name = "Default Name"
        int age = 25
        String address = "Default Address" 
    }
    
    println new Foo()
    println new Foo(name: "John Doe")
    println new Foo(name: "Max Payne", age: 30)
    println new Foo(name: "John Miller", age: 40, address: "Omaha Beach")
    
    //Prints
    Foo(name:Default Name, age:25, address:Default Address)
    Foo(name:John Doe, age:25, address:Default Address)
    Foo(name:Max Payne, age:30, address:Default Address)
    Foo(name:John Miller, age:40, address:Omaha Beach)
    

    UPDATE
    @codelark's astrology :). In case the class is not accessible to set default values, you can do like

    @ToString(includeFields = true, includeNames = true)
    class Bar{
        String name
        int age
        String address
    }
    
    def createBar(Map map = [:]){
        def defaultMap = [name:'John Doe',age:51,address:'High Street 11']
        new Bar(defaultMap << map)
    }
    
    println createBar()
    println createBar(name: "Ethan Hunt")
    println createBar(name: "Max Payne", age: 30)
    println createBar(name: "John Miller", age: 40, address: "Omaha Beach")
    
    
    //Prints
    Bar(name:John Doe, age:51, address:High Street 11)
    Bar(name:Ethan Hunt, age:51, address:High Street 11)
    Bar(name:Max Payne, age:30, address:High Street 11)
    Bar(name:John Miller, age:40, address:Omaha Beach)
    
    0 讨论(0)
提交回复
热议问题