在 Java 中检查有效性

Checking for validity in Java

我听说检查 public 方法参数的有效性并在它们无效时抛出异常是一种很好的做法。我还听说您应该使用断言检查私有方法的参数。

我有几个问题:

是否应该将具有多个字段的对象传递给私有方法?

如果你这样做,你应该在这样做之前检查public方法中所有字段的有效性还是在使用时检查?

私有方法中的断言应该仅用于检查参数,还是在对象为 null 并且它尝试调用如下所示的方法的情况下使用?

A.doSomething()

Should you ever pass objects with multiple fields into private methods?

这样做本身并没有什么错误、坏处或特殊之处。如果您试图避免将复杂对象传递给私有方法,您会发现自己受到很大限制。

If you do, should you check the validity of all fields in the public method before doing so or check at time of use?

这完全取决于您。

如果提前检查可以避免做很多不必要的工作,那么早检查可能是个好主意。 (如果您知道您一开始就收到了无效输入,那么做很多 CPU 工作或一些长时间的网络调用就没有意义了!)

但是,您并不总是知道给您的是无效的,因此在某些情况下可能无法立即检查。

Should asserts in private methods be used just to check arguments or also in the case where you have object as null and it tries to call a method as shown below?

断言通常用于确保您的逻辑正确,而不是输入正确。假设您确定某些方法中的逻辑是这样的,它永远不会 return 负数,您可以放入一个断言,它会在它出现时提醒您,这表明实现中或你的设计。您应该使用异常来捕获无效输入。