> On Mar 9, 2018, at 6:24 PM, Brian Goetz <[email protected]> wrote:
> 
> . . . That gets us down to:
> 
>  record Foo(int num, String unrelated) {
>    Foo(int num, String unrelated) {
>      if (num <= 0) ...;
>    }
>  }
> 
> Which is slightly better.  The remaining repetition is the argument list of 
> the constructor is repeated.  On the one hand, this seems at first to be 
> incompressible: Java members have signatures.  But if we're willing to do 
> something special for records, we can take advantage of the fact that a 
> record _must_ have a constructor (the "primary constructor") that matches the 
> record signature, and let the user leave this out if they are declaring an 
> explicit primary constructor:
> 
>  record Foo(int num, String unrelated) {
>    Foo {
>      if (num <= 0) ...;
>    }
>  }
> 
> or
> 
>  record Foo(int num, String unrelated) {
>    primary-constructor {
>      if (num <= 0) ...;
>    }
>  }
> 
> or similar could be a shorthand for declaring the full primary constructor 
> signature.  I think that gets you down to your minimum, without losing much 
> in the way of readability.  

Ya know, as long as we are talknig about a mandatory constructor, if that 
special keyword “primary-constructor” were spelled “required”, it would look 
achingly familiar:

 record Foo(int num, String unrelated) {
   required {
     if (num <= 0) ...;
   }
 }

Compare to:

 record Foo(int num, String unrelated)
   requires
     (num <= 0)
 {
 }

—Guy

Reply via email to