Java:在catch块内引发异常

Java:在catch块内引发异常,java,exception,Java,Exception,假设我有一个方法combine T[] combine(T[] arr1, T[] arr2, Comparator<T> cmp, Class<?> type) throws IllegalArgumentException{ ... } T[]combine(T[]arr1,T[]arr2,比较器cmp,类类型)抛出IllegalArgumentException{ ... } 在里面,我想用反射创建一个数组T[]newArray=(T[])Array.new

假设我有一个方法
combine

T[] combine(T[] arr1, T[] arr2, Comparator<T> cmp, Class<?> type) throws IllegalArgumentException{

...

}
T[]combine(T[]arr1,T[]arr2,比较器cmp,类类型)抛出IllegalArgumentException{
...
}
在里面,我想用反射创建一个数组
T[]newArray=(T[])Array.newInstance(类型,arr1.length+arr2.length)。如果在初始化
newArray
期间出现错误,我想抛出
new illegalargumentexecption()


我应该怎么做?我能用试抓块做这个吗?在try块中,我将尝试初始化数组,在catch中,我将抛出IllegalArgumentException。

您可以按照您的设想执行,但我会注意两点:

  • 捕获任何异常而不是特定异常

  • 通过包装捕获的异常来引发
    IllegalArgumentException
    。拥有完整的stracktrace可能有助于调试

例如:

try{
...
}
catch (Exception e){
    throw new IllegalArgumentException("exception during combine() invocation with params..." , e);
}
请注意,实际上并不需要在方法声明中声明
抛出IllegalArgumentException
,因为客户端没有任何约束来处理它:它是一个。
这就像为一个可以抛出NullPointerException的方法声明
抛出NullPointerException


如果您想约束客户端处理异常,请使用checked。

您可以按照您的设想执行,但我会注意两点:

  • 捕获任何异常而不是特定异常

  • 通过包装捕获的异常来引发
    IllegalArgumentException
    。拥有完整的stracktrace可能有助于调试

例如:

try{
...
}
catch (Exception e){
    throw new IllegalArgumentException("exception during combine() invocation with params..." , e);
}
请注意,实际上并不需要在方法声明中声明
抛出IllegalArgumentException
,因为客户端没有任何约束来处理它:它是一个。
这就像为一个可以抛出NullPointerException的方法声明
抛出NullPointerException


如果您想约束客户端处理异常,请使用checked。

是否尝试在try中实现它。。抓住?您必须指定要返回的异常,即IllegalArgumentException,否则我认为您会得到一般异常。我很好奇,为什么要问这个问题?为什么不尝试从catch块抛出一个异常,看看它是否有效?它会回答你的问题,而且可能比在这里提问更快。你是否尝试过在一次尝试中实现它。。抓住?您必须指定要返回的异常,即IllegalArgumentException,否则我认为您会得到一般异常。我很好奇,为什么要问这个问题?为什么不尝试从catch块抛出一个异常,看看它是否有效?它会回答你的问题,可能比在这里提问更快。