回调返回非法值时的适当异常?

时间:2015-10-26 06:45:46

标签: java validation exception callback

如果回调返回非法值(或者出现意外行为),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能够提供了一个很好的例子,因为它依赖于同样的东西但是在构造函数参数中;但它的文档似乎没有提到这个问题。)

0 个答案:

没有答案