Hi, thanks for starting this discussion.

I am +1 for using the private constructor for util class. We don't need to
change it.

I think few libraries use the enum, such as guava, common-utils, or even
JDK, the private constructor is widely used.

I don't quite understand why a util class is an enum. Enum seems to be
conceptually different from general classes. It's just a util class, and I
don't want to enumerate it.

And I think what Timo said makes sense to me.

Best,
Jingsong

On Fri, Sep 25, 2020 at 5:38 PM Timo Walther <twal...@apache.org> wrote:

> Hi,
>
> honstely, I find using enums is more of a hack. `enum` stands for
> enumeration and is meant for listing flags or options. Using it for
> singleton patterns is just abusing a concept due to certain
> implementation details and less code.
>
> I feel this topic is like using Lombok for generating hashCode/equals.
> It means less coding but introduces another dependency and abuses the
> annotation processor. I would rather use the Java language according to
> the author's intention.
>
> Regards,
> Timo
>
> On 25.09.20 11:22, Piotr Nowojski wrote:
> > Hi,
> >
> > I don't mind one way or the other.
> >
> > I guess enum way is somehow safer, however did we really have any issues
> > with our current approach with `private` constructors? I mean, you are
> > mentioning that using reflections could overcome private constructors,
> but
> > is that a real concern in our code base? Has this caused some concrete
> > issues? If I would be reviewing a code doing things like this (or
> generally
> > speaking using reflections in the first place for anything), one should
> > better have a really good excuse :)
> >
> > So all in all, I would be +1 for allowing `Enum`, -0.1 for banning
> > `private` constructors approach, but I also wouldn't mind sticking with
> > `private` constructors for the sake of consistency if the majority of the
> > community has strong feelings against using enums.
> >
> > Piotrek
> >
> > pt., 25 wrz 2020 o 10:22 Yangze Guo <karma...@gmail.com> napisał(a):
> >
> >> Hi, devs,
> >>
> >> Recently, in the PR of FLINK-19179[1], we have a discussion about how
> >> to implement singleton pattern in Flink.
> >>
> >> Currently, most of the utility classes implement singleton pattern
> >> through the private constructor. Seldom utility classes leverage the
> >> enum mechanism. From my perspective, leveraging enum mechanism is more
> >> simple and it can also overcome reflection.
> >>
> >> Whether using enum classes or private constructors, it will be good to
> >> align the approach to achieve singleton in the whole Flink project.
> >>
> >> I would propose to leverage the enum mechanism in the Flink to
> >> implement singleton pattern and append it to the code-style
> >> guidelines. We may also have a JIRA ticket to refactor the existing
> >> code.
> >>
> >> What do you think?
> >>
> >> [1] https://github.com/apache/flink/pull/13416
> >>
> >> Best,
> >> Yangze Guo
> >>
> >
>
>

-- 
Best, Jingsong Lee

Reply via email to