假设我有一个方法combine
T[] combine(T[] arr1, T[] arr2, Comparator<T> cmp, Class<?> type) throws IllegalArgumentException{
...
}
在其中我想使用反射创建一个数组。 T[] newArray = (T[]) Array.newInstance(type, arr1.length+arr2.length);
。如果在初始化 newArray
期间出现错误,我想抛出 new IllegalArgumentExeption()
。
我应该如何更好地做到这一点?我可以用 try 和 catch block 来做到这一点吗?在 try block 内,我将尝试初始化数组,在 catch 内,我将抛出 IllegalArgumentEception。
最佳答案
你可以按照你的想法做,但我会注意两点:
捕获任何异常而不是特定异常
通过包装捕获的异常来抛出
IllegalArgumentException
。拥有完整的 stracktrace 可能有助于调试
例如:
try{
...
}
catch (Exception e){
throw new IllegalArgumentException("exception during combine() invocation with params..." , e);
}
请注意,实际上不需要在方法声明中声明 throws IllegalArgumentException
,因为客户端没有任何处理它的约束:它是 RuntimeException
.
这就像为可以抛出 NullPointerException 的方法声明抛出 NullPointerException
一样。
如果您想限制客户端处理异常,请使用已检查的 Exception
.
关于Java:在 catch block 内抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49497872/