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
>
>

Reply via email to