[records] propogating modifiers for implicit methods
Vicente Romero
vicente.romero at oracle.com
Mon Feb 24 22:53:31 UTC 2020
Hi Manoj,
In the current implementation methods `equals` and `hashCode` are final
regardless of the corresponding record being explicitly of implicitly
final. The fact that `toString` is not final is just a lack of
consistency that should be fixed but we should probably decide what the
spec should say about this first and then do the same for all the
implicitly generated methods.
In the case of `strictfp` the spec says in section `8.1.1.3 strictfp
Classes`:
....
This implies that all methods declared in the class, and all nested
types declared in
the class, are implicitly strictfp .
....
so this is not related to records, as every class with the `strictfp`
modifier applied will propagate it down to all its members.
Thanks,
Vicente
On 2/21/20 1:24 AM, Manoj Palat wrote:
> Hi,
> (a) Given a record, recordR(inta){}, I see the (implicit) final
> modifiers propagated to implicit methods hashCode() and equals()
> [javap output]
>
> public *final* boolean equals(java.lang.Object);
>
> However, toString() does not get the same ->
>
> public java.lang.String toString();
>
> (b) Adding an explicit modifier, say strictfp adds this to all three
>
> *strictfp**record*R(*int*a){}
>
> public strictfp java.lang.String toString();
>
> public final strictfp int hashCode();
>
> public final strictfp boolean equals(java.lang.Object);
>
> I didn't see this explicitly specified in the Records JLS ->
> http://cr.openjdk.java.net/~gbierman/jep359/jep359-20200115/specs/records-jls.html#jls-8.10.3
> Spec needs change? Or is there a newer version of spec ?
> Regards,
> Manoj
>
More information about the amber-spec-observers
mailing list