The Advantages of @NotNull and JSR 305

JSR 305 proposes adding anotations for defect detections, One enhancements proposed in this JSR is a null check annotation, Find Bugs and IntelliJ already provides support for this. When you use the @NotNull annotation you are defining that your code will not except a null parameter, if you were to provide a null parameter, the annotation would throw a RuntimeException. IntelliJ has integrated its use into the IDE, hence at compile time you you can be warned when you are about to assign NULL to a field that has been annotated as @NotNull.

The argument against using anotiations is that they should not to be used for language features. Also using the @NotNull annotation does reduce code clarity. Personally, once I got used to reading code littered with annotations, I did not find this an issue.

Example method using the @NotNull annotation.

public void MyMethodNotExceptingNull(@NotNull String param) {

because your method is defined not to accept null, you no longer have to provide boiler plate code to check for it :

if (param != null)

you can also define fields and local varibles to be @NotNull :

String myString;

Not only can you define @NotNull in your class methods but also in your interface methods.

Note : JSR305 attempts to standardize the name of the annotation currently findbugs calls it @NonNull and intelij calls it @NotNull

more details on findbug support for @NonNull

Example Annotation Code

The implementation of the @NotNull annotation looks like this.

import core.validation.ConstraintValidator;
import core.validation.NotNullConstraint;
import java.lang.annotation.*;
 * An element annotated with NutNull claims <code>null</code> value is <em>forbidden</em>
 * to return (for methods), pass to (parameters) and hold (local variables and fields).
 * Apart from documentation purposes this annotation is intended to be used by static analysis tools
 * to validate against probable runtime errors and element contract violations.
 * @author max
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
public @interface NotNull {
     * @return unknown
    String value() default "";
     * @return the message if this field is null.
    String message() default "must not be null.";
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License