如果回调返回非法值(或者出现意外行为),JDK是否包含一个适合抛出的异常类型?
例如,考虑一个将供应商作为构造函数参数的类,并在构造函数调用期间和之后调用它:
public class Example {
private Object fField;
private Supplier<Object> fFieldValueSupplier;
public Example(final Supplier<Object> fieldValueSupplier) {
fFieldValueSupplier = fieldValueSupplier;
updateField();
}
public final void updateField() {
fField = fFieldValueSupplier.get();
}
// ... other stuff ...
}
理想情况下updateField()
应该在实际使用fFieldValueSupplier.get()
的结果之前做任何适当的验证,但是 - 如果结果实际上无效,它应该抛出什么?在一个简单的setField(Object)
中,如果参数无效,我通常会提出IllegalArgumentException
;但在这种情况下似乎不合适,因为“无效参数”实际上是构造函数参数,构造函数可能已经完成。是否有另一种更合适的预定义异常类型?
(我试过想到JDK类会出现这种情况,所以我可以看到它们是如何处理它的;但我找不到任何好的模拟。我能找到的最接近的是Collections.sort
,如果列表元素比较不符合IllegalArgumentException
/ Comparable.compareTo
的合同,那么可以但不需要提出Comparator.compare
。我希望TreeSet
能够提供了一个很好的例子,因为它依赖于同样的东西但是在构造函数参数中;但它的文档似乎没有提到这个问题。)