There are several annotations that are commonly used to indicate nullability in Java code. The most commonly used annotations are:
@NotNull
: This annotation is used to indicate that a method parameter or a class field cannot be null. It is typically used to provide a compile-time null check, which helps to prevent null pointer exceptions at runtime.@Nullable
: This annotation is the opposite of@NotNull
, and is used to indicate that a method parameter or a class field can be null. It is typically used to provide a compile-time null check, which helps to prevent null pointer exceptions at runtime.@Nonnull
: This is an alias for@NotNull
, and is used in the same way. It is provided for compatibility with other nullability annotations that use the@Nonnull
notation.@CheckForNull
: This annotation is used to indicate that a method may return null, and that the caller should check for null before using the return value. It is typically used to provide a compile-time null check, which helps to prevent null pointer exceptions at runtime.@NonnullByDefault
: This annotation is used to specify a default nullability for all method parameters and class fields in a particular class or package. It is typically used to provide a default nullability rule that applies to all members of a class or package, without having to annotate each member individually.
These annotations are part of the javax.annotation
package, which is a standard package that is included in the Java Development Kit (JDK). To use these annotations, you need to import them in your code like this:
import javax.annotation.Nonnull;
import javax.annotation.NonnullByDefault;
import javax.annotation.Nullable;
import javax.annotation.CheckForNull;
Once the annotations are imported, you can use them to annotate method parameters, class fields, and method return values according to your nullability requirements. For example:
@NonnullByDefault
public class MyClass {
private final Object field1;
private final Object field2;
public MyClass(@Nonnull Object field1, @Nullable Object field2) {
this.field1 = field1;
this.field2 = field2;
}
@CheckForNull
public Object getField1() {
return field1;
}
@Nonnull
public Object getField2() {
return field2;
}
public void doSomething(@Nonnull Object obj) {
...
}
}
In this code, the @NonnullByDefault
annotation is used to specify that all method parameters and class fields in the MyClass
class are non-null by default, unless they are explicitly annotated with @Nullable
or @CheckForNull
. This allows you to avoid annotating every single member of the class with a nullability annotation, and instead use a default rule that applies to all members.
The @Nonnull
and @Nullable
annotations are used to annotate the method parameters of the constructor and the doSomething()
method, which indicates that these parameters cannot be null or can be null, respectively. The @CheckForNull
annotation is used to annotate the getField1()
method, which indicates that this method may return
javax.validation.constraints
is a package that contains a set of built-in constraint annotations that are used to specify validation rules for Java bean properties. These constraint annotations are typically used in conjunction with the Bean Validation API, which is a standard Java API for implementing validation logic in Java applications.
The javax.validation.constraints
package contains several constraint annotations that can be used to specify different types of validation rules. Some of the most commonly used constraint annotations are:
@NotNull
: This constraint annotation is used to indicate that a property cannot be null. It is equivalent to the@NotNull
annotation described in the previous answer, and can be used in the same way to enforce a non-null constraint on a property.@Size
: This constraint annotation is used to specify a size constraint on a property, such as a minimum and/or maximum size for a string or a collection. It can be used to ensure that a property has a specific size, or that it is within a certain range of sizes.@Min
and@Max
: These constraint annotations are used to specify minimum and maximum constraints on a property, such as a minimum or maximum value for a numeric property. They can be used to ensure that a property has a specific value, or that it is within a certain range of values.@Pattern
: This constraint annotation is used to specify a regex pattern that a property must match. It can be used to ensure that a string property has a specific format, such as a certain number of digits or a specific set of characters.@Email
: This constraint annotation is used to indicate that a string property must be a valid email address. It can be used to ensure that an email property has the correct format and structure of an email address.
These constraint annotations can be used to specify validation rules for properties of a Java bean. For example:
public class User {
@NotNull
private String username;
@Size(min = 8, max = 16)
private String password;
@Min(18)
private int age;
@Pattern(regexp = "[0-9]{3}-[0-9]{3}-[0-9]{4}")
private String phone;
@Email
private String email;
...
}
In this code, the @NotNull
, @Size
, @Min
, @Pattern
, and @Email
constraint annotations are used to specify validation rules for the username
, password
, age
, phone
, and email
properties of the User
class. These constraints will be enforced by the Bean Validation API when the properties are validated.
The javax.validation.constraints
package is part of the Bean Validation API, which is included in the Java Development Kit (JDK) as part of the Java Enterprise Edition (Java EE). To use this package in your code, you need to include the following import statement:
import javax.validation.constraints.*;
Once the package is imported, you can use the constraint annotations in your code to specify validation rules for your Java beans. You can also create custom constraint annotations by extending the Constraint
class, which allows you to define your own validation rules.
No comments:
Post a Comment