IMO, until we are all on Java 14 and benefit from its more detailed NPE
message, we need to call Validate.notNull _with a message_ that says what
variable blew up.

Gary

On Wed, Mar 4, 2020 at 9:01 AM Gilles Sadowski <gillese...@gmail.com> wrote:

> Le mer. 4 mars 2020 à 14:19, Gary Gregory <garydgreg...@gmail.com> a
> écrit :
> >
> > On Wed, Mar 4, 2020 at 7:58 AM sebb <seb...@gmail.com> wrote:
> >
> > > On Sat, 29 Feb 2020 at 18:09, Gilles Sadowski <gillese...@gmail.com>
> > > wrote:
> > > >
> > > > Le sam. 29 févr. 2020 à 18:39, Gary Gregory <garydgreg...@gmail.com>
> a
> > > écrit :
> > > > >
> > > > > On Sat, Feb 22, 2020 at 5:25 PM Gary Gregory <
> garydgreg...@gmail.com>
> > > wrote:
> > > > >
> > > > > > I would like to do the same in Lang as with Collections (see
> below.)\
> > > > > >
> > > > > > We currently perform checks like:
> > > > > >
> > > > > > Validate.isTrue(foo != null, ...)
> > > > > >
> > > > > > Which should be IMO:
> > > > > >
> > > > > > Validate.notNull(foo, ...);
> > > > > >
> > > > > > The difference being that the former throws IAE and the later
> NPE.
> > > > > >
> > > > > > As with [collections], my argument is the same, the JRE uses
> > > > > > Objects.requireNonNull() to throw an NPE, so I'd like to keep
> > > normalizing
> > > > > > on that.
> > > > > >
> > > > >
> > > > > Any thoughts? Should I proceed?
> > > >
> > >
> > > +1
> > >
> > > > +1 for NPE on unexpected null.
> > > > [But perhaps it is not necessary to double-check, as the JRE
> > > > will do it anyway (and throw NPE).]
> > >
> >
> > This is not about dropping the check, please re-read the thread,
> > specifically:
>
> Please re-read my reply (3 and 4 lines above).
> In line with what Sebb mentions; if the code is akin to
> ---CUT---
> void doSomethingWith(Object foo) {
>   Validate.notNull(foo, ...);  // Provably unnecessary because...
>   System.out.println("foo=" + foo.toString()); // ... this will throw NPE.
>   // ...
> }
> ---CUT---
> Then the check could be dropped, especially if it would throw
> NPE instead of IAE.
>
> In fact, my impression is that, when we control the chain of calls
> (e.g. when there is no external dependency), there is always a
> point where NPE will be thrown (by the JRE) unless the reference
> is never used; hence the check is not strictly necessary; it will only
> abort the chain earlier, at the cost of doing many checks that are
> not needed in the nominal case (where the reference is not null).
>
> Gilles
>
> >
> > We currently perform checks like:
> >
> > Validate.isTrue(foo != null, ...)
> >
> > Which should be IMO:
> >
> > Validate.notNull(foo, ...);
> >
> > notNull calls the JRE's Objects.requireNonNull()
> >
> >
> > > Depends on how and where the variable is used -- sometimes a null can
> > > cause hard to track errors, not necessarily NPE, and the exception (or
> > > possibly other failure) may be a long way from the initial method
> > > call.
> > >
> > > It's almost always better to report the problem as early as possible.
> > >
> > > I think the existing checks should be kept.
> > >
> >
> > Agreed, but I am talking but performing a better cleaner check by using
> > Validate.notNull(foo, ...) instead of  Validate.isTrue(foo != null, ...)
> >
> > Gary
> >
> >
> > >
> > > If it can be proved that the code would generate NPE immediately
> > > anyway, it might be worth dropping the check.
> > > However, code changes, so at least a comment should be left in its
> > > place to note that the code is relying on Java to generate the NPE at
> > > this point.
> > >
> >
> > > > Gilles
> > > >
> > > > >
> > > > > Gary
> > > > >
> > > > >
> > > > > >
> > > > > > Gary
> > > > > >
> > > > > > ---------- Forwarded message ---------
> > > > > > From: Gary Gregory <garydgreg...@gmail.com>
> > > > > > Date: Tue, Dec 10, 2019 at 9:59 AM
> > > > > > Subject: Re: [collection] NPE vs IAE in
> > > > > > org.apache.commons.collections4.CollectionUtils
> > > > > > To: Commons Developers List <dev@commons.apache.org>, Bruno P.
> > > Kinoshita <
> > > > > > brunodepau...@yahoo.com.br>
> > > > > >
> > > > > >
> > > > > > FTR, using requireNonNull is also an 'Effective Java'
> recommendation.
> > > > > >
> > > > > > Gary
> > > > > >
> > > > > > On Thu, Dec 5, 2019 at 4:54 PM Bruno P. Kinoshita
> > > > > > <brunodepau...@yahoo.com.br.invalid> wrote:
> > > > > >
> > > > > >>  +1 for NPE
> > > > > >>
> > > > > >>     On Friday, 6 December 2019, 5:22:34 am NZDT, Gary Gregory <
> > > > > >> garydgreg...@gmail.com> wrote:
> > > > > >>
> > > > > >>  Hi All:
> > > > > >>
> > > > > >> org.apache.commons.collections4.CollectionUtils contains a mix
> of
> > > checking
> > > > > >> for null inputs by throwing NullPointerExceptions in some
> methods
> > > and
> > > > > >> IllegalArgumentExceptions in others.
> > > > > >>
> > > > > >> I propose we standardized to NPE simply because the JRE provides
> > > > > >> Objects.requireNonNull() just for this purpose.
> > > > > >>
> > > > > >> Gary
> > > > > >>
> > > > > >
> > > > > >
> > > >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to