我有一段代码以JSON字符串编码某种业务数据:
public String encodeDataAsJsonString(Data data) throws JSONException {
JSONObject o = new JSONObject();
o.put("SomeField1", data.getSomeProperty1());
o.put("SomeField2", data.getSomeProperty2());
...
return o;
}
事情是:
因此,我最终在调用方法中这样做:
...
try {
encoded = encodeDataAsJsonString(data);
} catch (JSONException e) {
throw new RuntimeException(e);
}
...
这似乎是不幸中之大幸不是添加throws JSONException
到 每一个 方法调用堆栈。但是,它仍然感觉很脏,因此我的问题是:
如果我想让某些特定的已检查异常通过“常规未检查异常路由”,是否将其作为RuntimeException重新使用才是正确的习惯用法?
简短的回答,是的。
您可能会创建自己的异常类(运行时异常的子类),然后将其抛出,以使其更易于记录,在必要时捕获/处理它。像hibernate这样的事情通过使用HibernateException来实现,客户端/调用代码不是被强制捕获它,而是在可以完成特定于逻辑/应用程序的事情时始终可以捕获它。
根据JCIP第6.3.2节: Runnable是一个相当有限的抽象;run无法返回值或引发选中的异常。 无法返回值,因为其返回类型为void,但为什么不能引发选中的异常?
该文件指出 Lambda函数可能由于以下任何原因而失败: 函数在尝试到达终结点时超时。 函数无法成功解析输入数据。 该函数会遇到资源限制,例如内存不足错误或其他超时。 我的问题:如果我使用SQS Lambda集成(.NET) 我的函数引发异常 我的SQS可见性计时器设置为15分钟,最大接收计数为1,DLQ设置 函数会重试吗?当所有重试后抛出异常时,它会放入DLQ吗?
考虑下面的java代码片段: 这在Eclipse(Neon.2,JDK 8)中实现,Sonarint执行静态代码分析。它提供了重构的建议: 重构此方法以引发最多一个已检查异常,而不是:java。lang.InstanceionException,java。lang.IllegalAccessException 这项建议的基础是什么最佳做法?我知道一般来说对检查异常有一些争议,但是为什么在这种情况下
我注意到,在这个javadoc中,https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.UncaughtExceptionHandler.htmlUncaughtExceptionHandler用于发生异常但未被捕获的情况。但是,那个线程会悄悄地失败吗?我想是的,因为它是异步进行业务的,但我正在调查我们的一个进程的相关问题,我很惊讶现
编译器知道检查的异常不能在安全方法内抛出-所以也许它应该允许只捕获未检查的异常? 回到主要问题--有没有理由以这种方式实现捕获检查异常?这仅仅是设计中的一个缺陷还是我遗漏了一些重要的因素--也许是向后的不兼容性?在此场景中,如果只允许捕获,可能会出现什么问题?实例非常感谢。
下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!