C# Контракты против NotNull/ сверните свои собственные в Java

Я хотел бы сократить избыточные и подробные проверки нуля в Java, но я понимаю, что в Java нет стандартной аннотации @NotNull, в которой в C# есть контракты, которые можно использовать, такие как

Contract.Requires( x != null );

Я могу что-то упустить, но я не могу просто написать свой код?

public class Contract {

    public static void requireNotNull(Object object) {
        if ( object == null )
           throw new IllegalArgumentException("Contract forbids null");
    }

}

Это упускает какие-либо из преимуществ @NotNull или Contracts?

1 ответ

Контракты кода, в отличие от того, что вы написали на Java, могут быть проанализированы статически и при нарушении выдают ошибку сборки. Код Java, который вы написали, выдаст только ошибку во время выполнения.

Например, если вы пометите параметр в методе как не нулевой, а затем попытаетесь вызвать его на более высоком уровне, не выполняя нулевую проверку, вы получите ошибку. Это не ошибка времени компиляции, поскольку Code Contracts являются частью статического анализатора, и поэтому, если вы компилируете вне Visual Studio или другого продукта, который реализует статический анализатор Code Contract, он не будет пойман.

Смотрите эту документацию для более подробной информации.

Другие вопросы по тегам