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
>

Reply via email to