---------- Forwarded message --------- From: - <[email protected]> Date: Fri, May 21, 2021 at 10:14 AM Subject: Re: Java records used in enums To: Alberto Otero Rodríguez <[email protected]>
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 < [email protected]> 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 <[email protected]> > Enviado: viernes, 21 de mayo de 2021 16:28 > Para: Alberto Otero Rodríguez <[email protected]> > Cc: [email protected] <[email protected]> > Asunto: Re: Java records used in enums > > On Fri, 21 May 2021 at 14:51, Alberto Otero Rodríguez < > [email protected]<mailto:[email protected]>> 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 >
