Java 回调返回非法值时是否存在适当的异常?

Java 回调返回非法值时是否存在适当的异常?,java,validation,exception,callback,Java,Validation,Exception,Callback,JDK是否包含一个异常类型,如果回调返回一个非法值(或者行为异常),则应该抛出该异常类型 例如,考虑一个将供应商作为构造函数参数的类,并在构造函数调用期间和之后调用它: public class Example { private Object fField; private Supplier<Object> fFieldValueSupplier; public Example(final Supplier<Object> fieldValue

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 ...
}
公共类示例{
私人物品;
私人供应商;私人供应商;
公开示例(最终供应商fieldValueSupplier){
fFieldValueSupplier=fieldValueSupplier;
updateField();
}
公共最终作废更新字段(){
fField=fFieldValueSupplier.get();
}
//…其他东西。。。
}
理想情况下,
updateField()
应该在实际使用
fFieldValueSupplier.get()
的结果之前进行适当的验证,但是-如果结果实际上无效,它应该抛出什么?在一个简单的
setField(Object)
中,如果参数无效,我通常会提出
IllegalArgumentException
;但在这种情况下,这似乎不合适,因为“无效参数”实际上是构造函数参数,并且构造函数可能已经完成。是否有其他更合适的预定义异常类型


(我试着想想JDK类可能会出现这种情况,所以我可以看到它们是如何处理的;但我找不到任何好的类似物。我能找到的最接近的是
集合.sort
,如果列表元素比较不符合
Comparable.compareT的约定,它可以但不必引发
非法argumentexception
o
/
Comparator.compare
。我希望
树集
能提供一个很好的例子,因为它依赖于同一类型的东西,但在构造函数参数中;但是它的文档似乎没有提到这个问题。)

有什么东西反对创建自己的异常吗?基本问题是构造函数()中不应该有任何工作,那么这个问题就不会发生exist@EmersonCod:请随意忽略“工作”在构造函数中,如果你愿意的话。不管你怎么说,不管有没有它,问题都存在。@Clayn:不是真的。但我认为最好使用标准异常,当它们确实存在的时候,因为它们的含义是清楚的和众所周知的。(如果我不得不处理有自己的
NullReferenceException
InvalidArgumentException
OutOfBoundsArrayIndexException
而不是使用类似的JDK类的代码,我会很恼火。)@EmersonCod:(顺便说一句,如果你阅读链接到的页面,你会发现这不是它抱怨的。)