例外点是沟通 exceptional 情况 .
从这个意义上讲:如果你的例子中所有条件都是假的绝对意外,并且没有有效的返回值来表明这种情况,那么抛出RuntimeException是合理的做法;但我可能会将消息更改为:
throw new RuntimeException("All conditions failed: " + some data)
如上所述:它是关于沟通;在这种情况下,调试问题的人 . 因此,在此处包含所需信息可能会有所帮助,以便了解为什么所有这些检查结果都是 false .
关键是:该方法有 Contract ;该 Contract 应包括此类细节 . 含义:如果该方法是公共的,您应该添加一个带有清晰描述的@throws RuntimeException .
在这种情况下使用RuntimeException也是一种有效的做法;正如您所做的那样 not 想要污染您的方法签名,并在整个地方使用已检查的例外 .
编辑:当然,需要 balancer . 示例:我的类通常如下所示:
public class Whatever {
private final Foo theFoo;
public Whatever(Foo theFoo) {
Objects.requireNonNull(theFoo, "theFoo must not be null");
this.theFoo = theFoo;
所以,我的构造函数可能会抛出一个NPE;是 . 但是:只有那里 . 我的所有方法都可以依赖于所有字段都被初始化为非null的事实;它们是最终的,所以它们总是非空的 .
含义:必须保持合理;并“发展”一种感觉:哪些问题是特殊但可能的;哪些是不可能的,你不会污染你的代码到处检查它们 .
最后;只是为了明确这一点 - 添加例外仅仅是等式的一部分 . 什么东西抛出,那么你需要 grab 一些东西!因此,如上所述: balancer 进来 . 无论你在代码中做什么都必须"add value" . 如果您的代码没有't fulfill a clear, defined purpose, then chances are: you don' t需要它!