Java中验证程序异常的最佳方法是什么?

Java中验证程序异常的最佳方法是什么?,java,validation,Java,Validation,我是否应该为每种验证创建一个特殊的例外,例如: public void doSomething(Text text) { if (!text.isAlphaNumeric()) throw new NonAlphaNumericException("Text should be alphanumeric"); if (text.isBlank()) throw new BlankException("Text should not be empty or null"); ...

我是否应该为每种验证创建一个特殊的例外,例如:

public void doSomething(Text text) {
   if (!text.isAlphaNumeric()) throw new NonAlphaNumericException("Text should be alphanumeric");
   if (text.isBlank()) throw new BlankException("Text should not be empty or null");
   ...
}
或者,我应该执行一个常规异常,如:

public void doSomething(Text text) {
   if (!text.isAlphaNumeric()) throw new TextValidationException("Text should be alphanumeric");
   if (text.isBlank()) throw new TextValidationException("Text should not be empty or null");
   ...
}

如果使用第一种方法,则调用方可以分别处理每个异常:

try
{
    doSomething(new Text("blah blah"));
}
catch(NonAlphaNumericException e){/* do something */}
catch(BlankException e){/* do something else */}

如果使用第一种方法,则调用方可以分别处理每个异常:

try
{
    doSomething(new Text("blah blah"));
}
catch(NonAlphaNumericException e){/* do something */}
catch(BlankException e){/* do something else */}

这取决于您需要如何处理这些异常

另一种方法是使用混合方法:创建一个主异常类型和一些派生异常

通过这种方式,您可以选择要以特定方式引发/管理的异常。其他的可以用更一般的方式进行管理


这听起来像是java.lang.Exception和其他子类型(例如IOException等)之间的区别。

这取决于您需要如何处理这些异常

另一种方法是使用混合方法:创建一个主异常类型和一些派生异常

通过这种方式,您可以选择要以特定方式引发/管理的异常。其他的可以用更一般的方式进行管理


这听起来像是java.lang.Exception和其他子类型(例如IOException等)之间的区别。

这取决于您计划如何处理异常。更具体的异常允许捕获到更具体的行为。您计划如何使用这些异常?他们将如何被抓住?没有“应该”,这取决于你的要求。就个人而言,我认为每个验证问题都有一个例外是极端的,我不会这样做,除非我真的需要这样做。我没有这种需要。此外,特别是如果您要使用超粒度异常,我会将其包装得更深一层,并有一组
validate
实现,它们抛出各自的异常以避免大量重复代码。这取决于您计划如何处理异常。更具体的异常允许捕获到更具体的行为。您计划如何使用这些异常?他们将如何被抓住?没有“应该”,这取决于你的要求。就个人而言,我认为每个验证问题都有一个例外是极端的,我不会这样做,除非我真的需要这样做。我没有这种需要。另外,特别是如果你要使用超粒度异常,我将把它包装得更深一层,并有一组
validate
实现,它们抛出各自的异常以避免大量重复代码。+1它们都可以共享一个共同的超类,如TextValidationException,您可以充分利用这两个世界。i、 e.to也可以捕获TextValidationException。+1它们都可以共享一个共同的超类,如TextValidationException,您可以同时获得这两个方面的最佳效果。i、 e.to也可以捕获TextValidationException。