【问题标题】:Java: Throwing exception inside the catch blockJava:在catch块内抛出异常
【发布时间】:2018-03-26 18:06:14
【问题描述】:

假设我有一个方法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 块来做到这一点吗?在 try 块中我会尝试初始化数组,在 catch 中我会抛出 IllegalArgumentEception。

【问题讨论】:

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

标签: java exception


【解决方案1】:

你可以按照你的想法去做,但我会注意两点:

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

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

例如:

try{
...
}
catch (Exception e){
    throw new IllegalArgumentException("exception during combine() invocation with params..." , e);
}

请注意,实际上不需要在方法声明中声明throws IllegalArgumentException,因为客户端没有任何约束来处理它:它是RuntimeException
这就像为可以抛出它的方法声明 throws NullPointerException
如果您想约束客户端处理异常,请使用选中的Exception

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    相关资源
    最近更新 更多