Each of the above have various problems with regards to their use in
portable Java programs. Firstly, three of them are essentially proprietary
program-specific annotations (Findbugs, Intellij IDEA, Eclipse). Some of
them are standardized but are subject to availability problems (Java EE 6
annotations are only available on the Java EE 6 platform, and at the time
of writing, JSR 305 is essentially abandoned). All of them differ in their
retention semantics (JSR 305 and Java EE 6 annotations are retained at run-time,
others may not be). At the time of writing, Java 8 has just been released and
does not contain any definitions of @NotNull
annotations, but has incorporated JSR 308 type annotations,
which appears to subsume the intentions of JSR 305.