java-从泛型方法传播异常而无需引发声明
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-从泛型方法传播异常而无需引发声明,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2291字,纯文字阅读大概需要4分钟。
内容图文
![java-从泛型方法传播异常而无需引发声明](/upload/InfoBanner/zyjiaocheng/677/67d257d38b2c48a398e1075b1534c1b9.jpg)
我有一个简单的界面
public interface Func<I, O> {
public O apply(I i);
}
我有一个带有一堆私有(静态)类的类,这些类实现了该接口,如下所示
import org.json.*;
public static class Baz {
public static B Qux(String jsonSource) throws JSONException {
JSONObject m = new JSONObject(jsonSource);
return new Baz.Foo().apply(m);
}
private static class Foo implements Func<JSONObject, B> {
public B apply(JSONObject f) {
JSONObject x = f.getJSONObject("bar");
/* Whatever other code in here */
return new B(); /* Place-holder */
}
}
}
由于对JSONObjects进行的任何操作几乎都需要捕获JSONException,因此编译器会在JSONObject x = f.getJSONObject(“ bar”);处抱怨未捕获和未声明的异常.考虑到我可以将特定的应用程序简单地包装在try-catch中,然后将异常重新抛出给调用方,因此我尝试了如下操作:
private static class Foo implements Func<JSONObject, B> {
public B apply(JSONObject f) {
try {
JSONObject x = f.getJSONObject("bar");
/* Whatever other code in here */
return new B(); /* Place-holder */
catch (JSONException e) {
throw e;
}
}
}
但是,有了这个,我现在得到错误:未报告的异常JSONException;必须被捕获或声明为指向e抛出;
我不明白为什么这行不通.如预期的那样,进一步包装申请书并没有什么新意.
我的问题是:
>为什么这行不通?
>我该如何解决?
我相信一种解决方法是让我的界面接受异常类型.我不确定这种语法是否会起作用,但我想我可以按照
public interface FuncEx<I, O, E> {
public O apply(I i) throws E;
}
有更好的方法吗?我不认为我必须创建一个全新的界面来解决这一点.
解决方法:
已检查的异常(即,不是RuntimeException的子类的异常-如JSONException)构成方法签名的一部分.如果调用抛出已检查异常的方法,则必须对其进行处理,或声明自己抛出该异常.如果您自己抛出一个检查异常(就像您对捕获/重新抛出代码所做的那样),则仍必须声明它.
如果您不想声明抛出该异常,则可以将其包装在RuntimeException中.例如:
private static class Foo implements Func<JSONObject, B> {
public B apply(JSONObject f) {
try {
JSONObject x = f.getJSONObject("bar");
/* Whatever other code in here */
return new B(); /* Place-holder */
catch (JSONException e) {
throw new RuntimeException("Could not get bar", e);
}
}
}
关于何时抛出Checked Exception而不是RuntimeException的想法是多种多样的.对我来说,我的首要指导原则是,如果您可以合理地期望调用方以有意义的方式响应异常(而不仅仅是重新抛出异常),然后将其设置为已检查的异常.否则使其成为RuntimeException.
这是关于该主题的出色文章:http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html
内容总结
以上是互联网集市为您收集整理的java-从泛型方法传播异常而无需引发声明全部内容,希望文章能够帮你解决java-从泛型方法传播异常而无需引发声明所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。