&gt; I oppose all use of annotations. It&#x27;s metaprogramming (aka magic).<p>Don&#x27;t conflate annotations (a compile time construct) with how they can be used. They can be used in many ways. When used as runtime metadata they can be &quot;magic&quot;. But @Nullable&#x2F;@NonNull is (or rather, can be used as) one of Java 8&#x27;s pluggable type systems, inferred and and checked at compile time[1].<p>[1]: <a href="http:&#x2F;&#x2F;types.cs.washington.edu&#x2F;checker-framework&#x2F;current&#x2F;checker-framework-manual.html#nullness-checker" rel="nofollow">http:&#x2F;&#x2F;types.cs.washington.edu&#x2F;checker-framework&#x2F;current&#x2F;che...</a>