Paul King created GROOVY-7427:
---------------------------------

             Summary: TupleConstructor should allow a mechanism to switch off 
automatic parameter defaults
                 Key: GROOVY-7427
                 URL: https://issues.apache.org/jira/browse/GROOVY-7427
             Project: Groovy
          Issue Type: Improvement
            Reporter: Paul King
            Assignee: Paul King
            Priority: Minor


When using @TupleConstructor, it automatically provides defaults for the 
parameters. This is particularly useful behavior since it allows parameters 
which can remain as their default (user provided or null/0/false) can be left 
out of the constructor. In particular, a no-arg constructor corresponds to the 
case of all arguments left out. This is exactly the kind of constructor which 
Groovy needs for default named-argument processing.

Having said that, there are times when all is required is a single simple 
constructor having all of the classes properties. This issue allows a parameter 
{{defaults=false}} to be set to enable this new behavior.

For this class:
{code}
@TupleConstructor
class Person {
    String first, last
    int age
}
{code}
The following normal constructor is produced:
{code}
Person(String first=null, String last=null, int age=0) { this.first = first 
//etc... }
{code}
After Groovy's compilation phases are complete, the following constructors are 
visible to Java:
{code}
Person(String first, String last, int age) { //... }
Person(String first, String last) { this(first, last, 0) }
Person(String first) { this(first, null) }
Person() { this(null) }
{code}
Adding {{defaults=false}} as a parameter to TupleConstructor means that just 
the first of these will be produced. If any of the properties has a default 
value, when this setting is made false, an error will be flagged.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to