Я нахожусь в середине чтения отличной Clean CodeПереходя нуль к методу
Одна дискуссии о прохождении аннулирует в метод.
public class MetricsCalculator {
public double xProjection(Point p1, Point p2) {
return (p2.x - p1.x) * 1.5;
}
}
...
calculator.xProjection(null, new Point(12,13));
Он представляет собой различные способы обработки:
public double xProjection(Point p1, Point p2) {
if (p1 == null || p2 == null) {
throw new IllegalArgumentException("Invalid argument for xProjection");
}
return (p2.x - p1.x) * 1.5;
}
public double xProjection(Point p1, Point p2) {
assert p1 != null : "p1 should not be null";
assert p2 != null : "p2 should not be null";
return (p2.x - p1.x) * 1.5;
}
Я предпочитаю assertions подход, но мне не нравится тот факт, что утверждения по умолчанию выключены.
Книга, наконец, заявляет:
В большинстве языков программирования нет хорошего способа иметь дело с нулем, который передается от вызывающего случайно. Поскольку это так, рациональный подход - запретить передачу null по умолчанию.
На самом деле это не значит, что вы будете применять это ограничение?
У любого из вас есть сильные мнения в любом случае.
От https://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html Не используйте утверждения для проверки аргументов в публичных методах. Проверка аргументов обычно является частью опубликованных спецификаций (или контракта) метода, и эти спецификации должны выполняться независимо от того, включены или запрещены утверждения. Другая проблема с использованием утверждений для проверки аргументов заключается в том, что ошибочные аргументы должны приводить к соответствующему исключению среды выполнения (IllegalArgumentException, IndexOutOfBoundsException и т. Д.). Ошибка утверждения не приведет к соответствующему исключению. – 2017-12-27 11:01:40