---------- Forwarded message --------- From: - <liangchenb...@gmail.com> Date: Fri, May 21, 2021 at 10:14 AM Subject: Re: Java records used in enums To: Alberto Otero Rodríguez <albest...@hotmail.com>
I fail to understand what you want. How does making enums records fix the multithreading issue? If you wish to have enums declared like records code-wise, I see it as a possibility, but I don't see how it affects any enum behavior in any way. If you want a combination of record and enum, or a record with enumerated possible instances, it may be possible to add an alternative syntax for such enum declaration; but restricting all enums to be such enum records offers no benefit that I can see, especially given records themselves have severe restrictions (must have an accessible canonical ctor available; that ctor cannot throw checked exceptions; field/getter method name limits, so a "enum record" cannot declare fields like "values" "name"); also records are value-based while enums are identity based, which is another problem. In short, I believe regular enum suffices and a "record enum" offers little benefit while it cannot fix your issue at all. On Fri, May 21, 2021 at 10:00 AM Alberto Otero Rodríguez < albest...@hotmail.com> wrote: > It seems a non-existent problem until you face it, which is what happened > me today. > > I think at least (supposing enums can't be records) all the fields in > enums should be made final by default. > > Regards, > > Alberto. > ________________________________ > De: Kasper Nielsen <kaspe...@gmail.com> > Enviado: viernes, 21 de mayo de 2021 16:28 > Para: Alberto Otero Rodríguez <albest...@hotmail.com> > Cc: core-libs-dev@openjdk.java.net <core-libs-dev@openjdk.java.net> > Asunto: Re: Java records used in enums > > On Fri, 21 May 2021 at 14:51, Alberto Otero Rodríguez < > albest...@hotmail.com<mailto:albest...@hotmail.com>> wrote: > Hi, > > I think enums in Java should be immutable. When you let the programmer > change values in an enum instance, an unexpected behaviour can happen when > using multiple threads as enum instances are static (singleton). > > So, I was wondering why not make enums instances be defined as records > instead of normal classes. > > Lots of reasons, for example: > * It would be a breaking change for an almost non-existent problem. > * All internal state of enums would now be public. > * Enum's extend java.lang.Enum, records extend java.lang.Record. > java.lang.Enum cannot extend java.lang.Record because it has instance > fields. > > /Kasper >