我正在阅读优秀的清洁代码
一个讨论是关于将空值传递给方法。
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;
}
我更喜欢断言方法,但我不喜欢断言默认关闭的事实。
书最后说:
在大多数编程语言中,没有很好的方法来处理调用者意外传递的 null。因为是这种情况,理性的做法是默认禁止传递null。
它并没有真正涉及您将如何执行此限制?
无论哪种方式,你们中的任何人都有强烈的意见吗?