Какие аннотации связаны с нулевым значением в разработке Java?


В Java null — это специальное значение, представляющее «пустое значение». Я полагаю, что все хорошо осведомлены о роли null в Java, но мы обычно сталкиваемся с ошибками, связанными с null, в процессе разработки. Чтобы избежать этих ошибок, Java вводит серию аннотаций, связанных с нулевым значением, чтобы мы могли лучше решать и предотвращать ошибки, связанные с нулевым значением.

1. @Обнуляемый

Аннотация @Nullable, которая находится в javax.annotationпакете . Эта аннотация используется для обозначения переменных, параметров, возвращаемых значений функций и т. д., которые могут иметь значение null . Обычно эта аннотация используется в случае "nullable", чтобы объявить, что нам нужно избегать ошибок нулевого указателя, а также предоставить более богатую информацию для IDE и статических анализаторов. Используя @Nullable, мы можем более точно описать смысл кода и улучшить читабельность и удобство сопровождения кода. В то же время это также может помочь разработчикам найти потенциальные проблемы во время компиляции, тем самым улучшив качество и стабильность кода.

Пример использования @Nullable:

public static void doSomething(@Nullable String s) {
    
    
    if (s != null) {
    
    
        System.out.println(s);
    }
}

Примечание: аннотация @Nullable не защищает код, в котором может возникнуть NullPointerException, она только предоставляет информацию о коде и помогает указать их назначение. Поэтому при его использовании недостаточно просто использовать аннотацию @Nullable, нам также нужно написать код, чтобы определить, является ли переменная нулевой, и обрабатывать ее при необходимости.

2. @NonNull

@NonNull — это аннотация, определенная в javax.annotationпакете , которая используется для обозначения:

  • Когда вызов метода завершен, аннотированное возвращаемое значение не может быть пустым, и если оно пусто, будет выдано исключение NullPointerException.
  • Параметр или поле не могут иметь значение null, даже если вы пишете null. Если значение равно null, будет выброшено исключение NullPointerException.

Использование @NonNull может помочь нам писать более безопасный и надежный код, применять ограничения для соответствующих переменных, параметров и возвращаемых типов, предотвращать исключения нулевых указателей и предоставлять более удобные подсказки по коду. @NonNull похож на утверждение при написании кода времени компиляции, поэтому очень важно, чтобы ваш код был правильным.

Пример использования @NonNull:

public static int add(@NonNull Integer a, @NonNull Integer b) {
    
    
    return a + b;
}

Примечание. Если используется аннотация @NonNull, программа сообщит об исключении NullPointerException, если параметр имеет значение null.

3. @NotNull

@NotNull — это аннотация, определенная в org.jetbrains.annotationsпакете , она в основном используется для повышения безопасности и удобочитаемости. Подобно @Nullable и @NonNull, @NotNull также является аннотацией для проверки нуля, напоминая нам, что этот параметр должен быть установлен в значение, отличное от нуля.

Пример использования @NotNull:

public static boolean contains(@NotNull String[] strArr, @NotNull String str) {
    
    
    for (String s : strArr) {
    
    
        if (s.equals(str)) {
    
    
            return true;
        }
    }
    return false;
}

Примечание. В отличие от @NonNull, использование аннотации @NotNull создает исключение IllegalArgumentException, когда параметр или возвращаемое значение равно null.

4. @NullableDecl

@NullableDecl — это аннотация, определенная в com.google.errorprone.annotationspackage , которая указывает, что тип аннотации может быть нулевым или пустым. Обычно используется для возвращаемых значений или полей и может использоваться с аннотацией @NonNullApi.

Пример использования @NullableDecl:

public @NullableDecl Object getObject() {
    
    
    return null;
}

Примечание. Когда возвращаемый тип равен null, его можно пометить аннотацией @NullableDecl, которую затем можно проанализировать с помощью IDE и статического анализатора.

5. @NonNullApi

Аннотация @NonNullApi, которая определена в org.eclipse.jdt.annotationпакете . Эту аннотацию можно использовать для аннотирования пакетов, классов, конструкторов, методов и свойств. Его основная функция — указать, что аннотируемый элемент — это API, который не позволяет параметрам, членам или возвращаемым значениям быть нулевыми. Это означает, что код, использующий API, должен гарантировать, что нулевые значения не могут возникнуть во время выполнения, повышая устойчивость и надежность кода.

Пример использования @NonNullApi:

@NonNullApi
package com.example.demo;

//类中属性前加上@NonNull注解
class User {
    
    
    @NonNull
    private Integer id;
    @NonNull
    private String name;
    
    public User(Integer id, String name) {
    
    
        this.id = Objects.requireNonNull(id);
        this.name = Objects.requireNonNull(name);
    }
    
    public Integer getId() {
    
    
        return id;
    }
    
    public String getName() {
    
    
        return name;
    }
}

Примечание: обратите внимание, что аннотацию @NonNullApi следует добавлять к каждому классу, который поддерживает этот API.Если аннотация @NonNullApi опущена, это означает, что этот API не поддерживает обязательное использование аннотации @NonNull.

6. @NullableApi

@NullableApi — это аннотация, определенная в org.eclipse.jdt.annotationpackage , похожая на @NonNullApi, она в основном используется для аннотации пакета, класса, конструктора, метода, атрибута и указывает, что элемент представляет собой API, поддерживающий null.

Пример использования @NullableApi:

@NullableApi
package com.example.demo;

//类中属性声明可以为null
class User {
    
    
    @Nullable
    private String address;
    @Nullable
    private String phone;
    
    public User(String address, String phone) {
    
    
        this.address = address;
        this.phone = phone;
    }
    
    public void setAddress(@Nullable String address) {
    
    
        this.address = address;
    }
    
    public void setPhone(@Nullable String phone) {
    
    
        this.phone = phone;
    }
    
    public @Nullable String getAddress() {
    
    
        return address;
    }
    
    public @Nullable String getPhone() {
    
    
        return phone;
    }
}

Примечание. Аннотация @NullableApi означает, что параметры, возвращаемые типы и поля могут иметь значение null, а API поддерживает аннотации с использованием аннотаций @Nullable.

7. @SuppressWarnings («пустота»)

Аннотацию @SuppressWarnings("nullness") можно использовать для отключения проверки нулевых значений, что позволяет игнорировать проверки нулевых значений в определенных местах. Аннотации такого типа могут повысить гибкость кода, позволяя нам при необходимости обходить проверки нулей, сохраняя при этом код читабельным и удобным для сопровождения. Кроме того, использование этой аннотации также может помочь нам лучше понять, как в коде обрабатываются нулевые значения, чтобы лучше оптимизировать производительность и надежность кода.

Пример использования @SuppressWarnings("nullness"):

@SuppressWarnings("nullness")
public boolean isEmpty(String str) {
    
    
    return str.length() == 0;
}

Примечание: аннотацию @SuppressWarnings("nullness") следует использовать с осторожностью, мы не должны использовать ее вслепую, ее следует использовать только при необходимости.

おすすめ

転載: blog.csdn.net/ly1347889755/article/details/130255542