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, он не будет пойман.
Смотрите эту документацию для более подробной информации.