>
> In my opinion, assuming everything is nullable by default isn't the
> best approach for writing robust code. I believe a bias towards
> non-nullness leads to more reliable systems.

I agreed with the intention, but am concerned that assuming everything is
non-nullness may discourage null-checking, which is problematic as runtime
null-checking isn't a thing.

Yufei


On Wed, May 21, 2025 at 9:52 AM Alex Dutra <alex.du...@dremio.com.invalid>
wrote:

> Hi Eric,
>
> You're right that annotations don't change the bytecode at runtime.
> Their real value comes during compilation, as many static analysis
> tools use them to flag potential issues. They can even cause build
> failures depending on how you configure them. My IDE (IntelliJ)
> frequently warns me when I forget to handle a potential NPE; if you're
> not seeing similar feedback, it might be worth checking your IDE
> settings.
>
> While the annotations are primarily for compile-time checks, that
> doesn't mean we can't also incorporate runtime checks. We should aim
> to include these whenever this makes sense, for example by using
> Guava's Preconditions. This is especially useful if we can't guarantee
> that a method parameter, for instance, will never be null, because
> it's being provided by some external system.
>
> In my opinion, assuming everything is nullable by default isn't the
> best approach for writing robust code. I believe a bias towards
> non-nullness leads to more reliable systems.
>
> I am also a big fan of Optional and think we should strive to use it
> as much as possible. That said, it's not always possible, especially
> if you are implementing a third-party interface that doesn't use it.
> Using Optional in class fields and method parameters is also
> controversial: Optional was designed primarily as a signal from the
> callee to the caller, to signify: "no result". In other words, its
> main purpose is to clarify method return types. This post on Stack
> Overflow by Brian Goetz is worth reading: [1].
>
> Thanks,
>
> Alex
>
> [1]:
> https://stackoverflow.com/questions/26327957/should-java-8-getters-return-optional-type/26328555#26328555
>
>
> On Wed, May 21, 2025 at 4:37 PM Eric Maynard <eric.w.mayn...@gmail.com>
> wrote:
> >
> > Thanks for bringing this up as I’ve been confused by this a few times.
> >
> > Before Polaris I hadn’t really encountered these annotations and I was
> > surprised to learn they don’t “do anything” — that is, there is no
> > additional safety you get at runtime when a null value is passed into a
> > parameter marked non-null. Similarly nothing enforces that you handle
> null
> > values when something is annotated as nullable.
> >
> > For that reason, I tend to assume everything is nullable regardless of
> > annotation and I would be in favor of standardizing around that
> assumption.
> > Iff something is annotated as Non-null a developer should feel safe
> > skipping a check for null, but otherwise they should handle null.
> >
> > I am a big fan of Optional and of trying to reduce the usage of null as
> > much as possible though.
> >
> > On Wed, May 21, 2025 at 3:02 PM Alex Dutra <alex.du...@dremio.com.invalid
> >
> > wrote:
> >
> > > Hi all,
> > >
> > > A while ago, we had a discussion regarding which nullness annotations
> > > to use and whether we should consider favoring non-null by default. I
> > > would like to revive that discussion.
> > >
> > > We are currently using the `jakarta.annotation` package consistently,
> > > but the defaults are not clear: should we consider everything as
> > > non-null by default and only annotate the nullable things, or the
> > > other way around? Some classes are cluttered with both annotations,
> > > which seems unnecessary and confusing.
> > >
> > > I would personally be in favor of considering everything as non-null by
> > > default.
> > >
> > > Please let me know your thoughts.
> > >
> > > Alex
> > >
>

Reply via email to