Hi,

consider
record R(){
        public R throws Exception {}        
}

>From JLS 14 Sec 8.10.4,
A canonical constructor must not have a throws clause.

Sec 8.10.5 says
A compact constructor is a canonical constructor.

By the above two, it can be inferred that a compact constructor must not have a throws clause. However, there is no explicit mention of this restriction in Sec 8.10.5 [1]

I think it would good to add this explicitly in the next version of spec (assuming the above is true).

[1] http://cr.openjdk.java.net/~gbierman/jep359/jep359-20200115/specs/records-jls.html#jls-8.10.5
Regards,
Manoj.

Side Note:
To compare, javac throws errors but not this particular error (may be due to error recovery)
javac14 --enable-preview --release 14 X.java 
X.java:2: error: <identifier> expected
        public R throws Exception {}
                ^
X.java:2: error: field declaration must be static
        public R throws Exception {}
                 ^
  (consider replacing field with record component)
X.java:2: error: invalid method declaration; return type required
        public R throws Exception {}
 

Reply via email to