java异常的总接口_重构:Java特别的接口修改:在throws子句中添加一个异常?
我用具体的代码来解释下吧
接口A,有方法X
public interface A {
public void methodX() throws IOException;
}
在用户模块有这样一段调用
public class ModuleUser{
public void methodY(A a) throws IOException
{
a.methodX();
}
}
现在要对方法X增加一个异常,变为:
public interface A {
public void methodX() throws IOException,DataFormatException;
}
这样用户模块ModuleUser的方法Y就要修改,不修改,编译就不会通过。
怎么样解决呢?
方法1,新方法调用旧方法。(接口中不能新方调用旧方法,所以我改为抽象类)
public abstract class A {
public void methodX() throws IOException
{
try {
methodNewX();
} catch (DataFormatException e) {
throw new RuntimeException(e);
}
}
public abstract void methodNewX() throws IOException ,DataFormatException;
}
方法2: 以拋出一个unchecked异常,unchecked就是编译器不检查的运行时异常。
如下
public interface A {
public void methodX() throws IOException,RuntimeException;
}
这样用户代码也不用改。
但这两个方法都不好。
作者喜欢的做法是这样的(也是推荐的方式)。
在包中定义自己的异常
public class MyException extends Exception {
}
接口一开始就写成
public interface A {
public void methodX() throws MyException;
}
用户模块就会是这样的:
public class ModuleUser{
public void methodY(A a) throws MyException
{
a.methodX();
}
}
如果再遇到上面要加异常信息的情况
就为MyException创建一个子类,加接口A上,这样用户代码就不用改,也能适配。
上面一段话大概就是想表达这个观点。
因为这本书是国外人写的,翻译成中文,所以读起来有点别扭。
英文原文是这样的
There is one particular area with problems in changing interfaces in Java: adding an exception to the throws clause.
读这本书,觉得不好理解的,就可试着看看英文原文。
java异常的总接口_重构:Java特别的接口修改:在throws子句中添加一个异常?相关推荐
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
- java和python自学教程_适合 Java开发者学习的Python 入门教程—文海思创
原标题:适合 Java开发者学习的Python 入门教程-文海思创 [文海思创讯]在Java文章频道里,我们大部分人应该对该语言都非常的了解,而且在该生态圈内至少已经呆了好几年了.这让我们有常规和专业 ...
- java如何查看调用记录_查看Java记录
java如何查看调用记录 JEP 359 (可在JDK 14中用作预览功能)将记录引入Java. 记录是对普通数据聚合建模的简单方法. 一个简单的范围记录如下所示: record Range( int ...
- java反序列化异常接不到_由Java对象反序列化异常想到的
今天写代码时候遇到一个异常,异常信息如下: Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException ...
- webservice 暴漏接口_解决java web 项目发布webservice接口
最近公司有一个需求,需要暴露当前web项目的接口给第三方系统调用,网上查到webservice是跨平台.跨语言的应用技术,所以作为首选. 查找了很多例子,都是很简单的加@WebService到类,加@ ...
- java方法的调用类型转换_关于java:实现接口,方法调用和类型转换的方法
考虑以下代码 interface MyInterface{ void method(String s);// if we write static modifier we have compile e ...
- java set 接口_【Java提高十七】Set接口集合详解
三.Set接口 Set是一种不包括重复元素的Collection.它维持它自己的内部排序,所以随机访问没有任何意义.与List一样,它同样运行null的存在但是仅有一个.由于Set接口的特殊性,所有传 ...
- java web怎么实现踢人_【Java】浅谈踢人下线的设计思路!(附代码实现方案)
前言 前两天写了一篇文章,主要讲了下java中如何实现踢人下线,原文链接:java中如何踢人下线?封禁某个账号后使其会话立即掉线! 本来只是简单阐述一下踢人下线的业务场景和实现方案,没想到引出那么多大 ...
- 新手学java还是python知乎_学java好还是Python好?
首先我简单的说下目前的市场发展行情,Java和Python发行时间都有很多年了,但是或许你自己也应该清楚,Python是什么时候开始步入我们的生活,步入我们的眼线的,对,就是近几年,这几年随着培训机构 ...
最新文章
- Android Studio调试功能使用总结
- Android初级开发笔记-- activity启动模式的学习(1)
- vysor原理以及Android同屏方案
- 数据结构之查找算法:散列查找
- ftp 425 Can't open data connection. 的解决方案
- 实验三:跟踪分析Linux内核的启动过程
- 超级终端secureCRT-下载及使用
- 感应(异步)电机磁场定向控制速度环PI控制参数设计
- 数据治理平台对比及atlas的安装和介绍
- 【微服务】Nacos 注册中心的设计原理
- H5支付(支付宝)开通流程
- html js更新数据不刷新页面,用javascript实现无刷新更新数据
- 小说程序源码 自动采集
- python循环5次_python基础-循环语句(5)
- kettle导数据入HBase数据库报错解决
- Kernel panic - not syncing: IO-APIC + timer doesn‘t work解决办法
- 2021高考萧山二中成绩查询,2021年杭州高考各高中成绩及本科升学率数据排名及分析...
- 理财系列 3 股票体检指标之市净率
- 【主动投资组合管理】第1章 绪论
- Citrix 相关资料整理
热门文章
- Django(part20)--数据库和模型
- 《乌合之众》读书笔记(part5)--名望的特性就是阻止我们看到事物的原本面目,彻底麻痹我们的判断力
- cmd长ping记录日志和时间_Gin 框架系列 — 路由中间件:日志记录
- go环境搭建_容器化 Go 开发环境的尝试
- delphi word类型_现在的女生喜欢什么类型的男生?|What Kind of Boys Do Girls Like?
- 用 ABAP 实现的报表欢迎屏幕 - Splash Screen
- orbeon form 的架构简介 - 如何访问用户通过 form 存储的数据
- 如何访问 SAP Screen Personas 培训系统以及完成一个最简单的例子
- SAP Commerce Cloud Storefront 框架选型:Accelerator 还是 Spartacus?
- 用SAP ALV Integrated Data Access展示CDS view数据的一些调试截图