Существует ли по умолчанию аннотация уровня класса, которая не устарела, указывающая ненулевые возвращаемые значения по умолчанию

Google подводит меня. Раньше была такая аннотация: ReturnValuesAreNonnullByDefault.

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

2 ответов


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

Если вы очень спешите, скопируйте-N-вставьте устаревшую аннотацию и удалите устаревшую.

package com.sample;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

import javax.annotation.meta.TypeQualifierDefault;

/**
 * This annotation can be applied to a package or class to indicate that the 
 * classes' methods in that element all return nonnull values by default
 * unless there is
 * <ul>
 *   <li>an explicit nullness annotation
 *   <li>a default method annotation applied to a more tightly nested element.
 * </ul>
 */
@Documented
@Nonnull
@TypeQualifierDefault(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReturnValuesAreNonnullByDefault {
    // feel free to name it MethodsAreNonnullByDefault; I find that confusing
}

Если вы используете Checker Framework, тогда вы можете использовать @DefaultQualifier. Например, вы можете написать

@DefaultQualifier(value=NonNull.class, locations=DefaultLocation.RETURNS)

однако вам не нужно это делать, потому что платформа проверки Проверка Nullness уже использует это значение по умолчанию. (Как вы обнаружили, лучшим значением по умолчанию является предположение, что каждый метод возвращает null.)

преимуществом Nullness Checker является то, что он обнаруживает больше ошибок, связанных с нулевым указателем чем FindBugs, не делает.

проверка Nullness-это совместимость с аннотациями FindBugs, поэтому вы можете попробовать проверку Nullness без необходимости изменять существующие аннотации FindBugs в коде.