I’ve seen a different approach in libraries like Mockito and Hamcrest that
split up utility classes by category, then they use a tool to copy all the
static stuff to generated aggregate classes.

On Sun, Sep 6, 2020 at 09:23 Xeno Amess <xenoam...@gmail.com> wrote:

> > I am not a big fan of extending Static Utility classes.  And Joshua
>
> Bloch is not either from his book "Effective Java"...
>
>
>
> Yep I'm sure he will never like this lol.
>
>
>
> Melloware <melloware...@gmail.com> 于2020年9月6日周日 下午10:18写道:
>
>
>
> > I am not a big fan of extending Static Utility classes.  And Joshua
>
> > Bloch is not either from his book "Effective Java"...
>
> >
>
> > See: https://www.informit.com/articles/article.aspx?p=1216151&seqNum=4
>
> >
>
> >
>
> > On 9/6/2020 10:06 AM, Xeno Amess wrote:
>
> > > class AUtil {
>
> > >      public static String getStringA() {
>
> > >          return "A";
>
> > >      }
>
> > > }
>
> > >
>
> > > class ExtendedAUtil extends AUtil {
>
> > >      public static String getStringABCDE() {
>
> > >          return "ABCDE";
>
> > >      }
>
> > > }
>
> > >
>
> > > public class Main {
>
> > >      public static void main(String[] args) {
>
> > >          System.out.println(ExtendedAUtil.getStringA());
>
> > >          System.out.println(ExtendedAUtil.getStringABCDE());
>
> > >      }
>
> > > }
>
> > >
>
> > > Maybe it's better to add some runnable codes :)
>
> > >
>
> > > Xeno Amess <xenoam...@gmail.com> 于2020年9月6日周日 下午10:05写道:
>
> > >
>
> > >> Well sometimes we want to extend(or modify) some behaviors of one Util
>
> > >> Class.That is why I don't want the constructor be private.
>
> > >> For example, there be a AUtil:
>
> > >>
>
> > >> public class AUtil{
>
> > >>      public static String getStringA(){
>
> > >>            return "A";
>
> > >>      }
>
> > >> }
>
> > >>
>
> > >> then some people need a function that returns "ABCDE".
>
> > >> Actually "ABCDE" is useless for any other repos, so we can never pass
>
> > the
>
> > >> pr to put the getABCDE function to AUtil.
>
> > >> And that people also need the  getStringA function.
>
> > >> So there be a way:
>
> > >>
>
> > >> public class ExtendedAUtil extends{
>
> > >>      public static String getStringABCDE(){
>
> > >>            return "ABCDE";
>
> > >>      }
>
> > >> }
>
> > >>
>
> > >> In this way that people can use ExtendedAUtil as an extended  AUtil.
>
> > >> I admit that might be sugar and tricky, but it will help shorten the
>
> > codes.
>
> > >> BUT if we make the AUtil have only private constructor, then we cannot
>
> > do
>
> > >> such things, as class who have private constructors only cannot be
>
> > extended.
>
> > >>
>
> > >> Melloware <melloware...@gmail.com> 于2020年9月6日周日 下午9:55写道:
>
> > >>
>
> > >>> That is why I love Lombok's @UtilityClass.
>
> > >>>
>
> > >>> https://projectlombok.org/features/experimental/UtilityClass
>
> > >>>
>
> > >>> It enforces a static class is truly static by making the constructor
>
> > >>> private and throwing an exception, making sure all methods are
> static,
>
> > >>> marking the class as Final etc.
>
> > >>>
>
> > >>>
>
> > >>> On 9/6/2020 9:53 AM, Xeno Amess wrote:
>
> > >>>>>    Inheritance in Java on the static side is
>
> > >>>> not the same as on the instance side
>
> > >>>>
>
> > >>>> Yep, I know it. It will not override but just, hiding.
>
> > >>>> I admit it might confuse people sometimes.
>
> > >>>>
>
> > >>>>> subclassing a class that only
>
> > >>>> provides static methods is no help.
>
> > >>>>
>
> > >>>> Well actually I personally use it for a shortcut or something.
>
> > >>>> Of course we can do this by fork/wrap the static functions one by
> one,
>
> > >>> but
>
> > >>>> extending it directly can make the codes shorter.
>
> > >>>>
>
> > >>>> Gary Gregory <garydgreg...@gmail.com> 于2020年9月6日周日 下午9:48写道:
>
> > >>>>
>
> > >>>>> On Sun, Sep 6, 2020 at 9:44 AM Xeno Amess <xenoam...@gmail.com>
>
> > wrote:
>
> > >>>>>
>
> > >>>>>> The idea behind not making *Util constructors private is that it
>
> > makes
>
> > >>>>>> people be able to extend that class.
>
> > >>>>>> for example:
>
> > >>>>>>
>
> > >>>>>>
>
> > >>>
>
> >
> https://github.com/apache/commons-lang/blob/master/src/main/java/org/apache/commons/lang3/StringUtils.java#L9627
>
> > >>>>>
>
> > >>>>> I have not see a use case that requires instances of classes that
>
> > only
>
> > >>>>> provide static methods in a long time, like the Javadoc mentions,
>
> > there
>
> > >>>>> used to be JavaBean tools that needed this, and some UI builders
>
> > IIRC,
>
> > >>> but
>
> > >>>>> I do not see a case of it today. Inheritance in Java on the static
>
> > >>> side is
>
> > >>>>> not the same as on the instance side, so subclassing a class that
>
> > only
>
> > >>>>> provides static methods is no help.
>
> > >>>>>
>
> > >>>>> Gary
>
> > >>>>>
>
> > >>>>>
>
> > >>>>>> Gary Gregory <garydgreg...@gmail.com> 于2020年9月6日周日 下午9:39写道:
>
> > >>>>>>
>
> > >>>>>>> The idea behind making *Util constructors private is that it does
>
> > not
>
> > >>>>>> make
>
> > >>>>>>> sense to instantiate a class that only has static methods.
>
> > >>>>>>>
>
> > >>>>>>> Gary
>
> > >>>>>>>
>
> > >>>>>>>
>
> > >>>>>>> On Sun, Sep 6, 2020 at 12:49 AM Xeno Amess <xenoam...@gmail.com>
>
> > >>>>> wrote:
>
> > >>>>>>>> for example: can we make its constructor public instead of
>
> > private?
>
> > >>>>>>>>
>
> > >>> ---------------------------------------------------------------------
>
> > >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>
> > >>> For additional commands, e-mail: dev-h...@commons.apache.org
>
> > >>>
>
> > >>>
>
> >
>
> > ---------------------------------------------------------------------
>
> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>
> > For additional commands, e-mail: dev-h...@commons.apache.org
>
> >
>
> >
>
> --
Matt Sicker <boa...@gmail.com>

Reply via email to