Hi Volkan, I think the strength of the feelings in my argument was more of a reflection on my frustration of my lack of involvement in this new valuable module. There are many FOSS projects I care about and only so many hours in a day. I am glad that you are open to my views, regardless of the outcome we choose.
In general I would say we want 100% binary compatibility for the 2 API modules. For other modules we don't want to make life harder than it has to be for folks but my personal view is that this case falls into the category where we can do whatever we want. Gary Gary On Wed, Nov 18, 2020, 03:15 Volkan Yazıcı <[email protected]> wrote: > Thanks for your sincere feedback Gary, really appreciated. > > Given none of us is really strongly opinionated about this, except Gary, I > am okay to follow his suggestion. This brings up the following question: > Shall I replace all enum singletons (in JTL module) with "final classes > with a private ctor"? If so, would it break the binary compatibility? If it > would, given JTL is a pretty new module and probably doesn't have any > wide-spread usage of its classes by users, is it a big deal? > > BTW, I am really happy this (un?)fortunate occasion triggered another > committer to review the JTL code base. Feels like a win for me. ;P > > On Wed, Nov 18, 2020 at 12:28 AM Gary Gregory <[email protected]> > wrote: > > > [Please take this constructively despite my string words] > > > > Arg. As much as I love Effective Java and admire Joshua Bloch, this one > > feels like a brain fart, and Block even concedes this pattern "may feel a > > bit unnatural", no kidding. This is an ENUM, but it does NOT enumerate > > ANYTHING. It is only used as a hack to avoid defining a private ctor. The > > falls for me in the same category as defining constants in interfaces > when > > interfaces should be used to define contracts. > > > > To make things worse, this enum does not even follow the pattern > documented > > in Effective Java because it does not define an INSTANCE enum value! > > > > For me, this definitely violates the principle of least surprise :-( > > > > Sorry to pile on... but also: Why is this type even public? > > > > I suppose I only have myself to blame for not reviewing the original > commit > > ;-) but I am reviewing now ;-) > > > > Gary > > > > > > > > On Tue, Nov 17, 2020 at 3:59 PM Carter Kozak <[email protected]> wrote: > > > > > I'm a big fan fan of enum singletons. This case looks like an enum with > > no > > > values for utility methods to avoid a private ctor, I haven't used > enums > > > this way myself. I think the trade-off is between avoiding having to > > write > > > a private constructor to prevent extension, and the downside of enum > > static > > > methods e.g. Uris.values(), Uris.valueOf(String), > > > Uris.valueOf(Class,String) which could be argued violate the principle > of > > > least astonishment. I don't have much of an opinion on enum utility > > methods. > > > > > > On Tue, Nov 17, 2020, at 15:48, Volkan Yazıcı wrote: > > > > I use enums for singletons, which is the recommended way to create > > > > singletons in Effective Java by Joshua Bloch. Given I have used it in > > > some > > > > other places as well and heard no complaints so far, I did not > convert > > > them > > > > to a final class with a private ctor. Should I? > > > > > > > > On Tue, Nov 17, 2020 at 9:25 PM Gary Gregory <[email protected] > > > > > wrote: > > > > > > > > > Hi all, > > > > > > > > > > Why is this an enum and not a class? > > > > > > > > > > Gary > > > > > > > > > > > > > > >
