我用具体的代码来解释下吧

接口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子句中添加一个异常?相关推荐

  1. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. java和python自学教程_适合 Java开发者学习的Python 入门教程—文海思创

    原标题:适合 Java开发者学习的Python 入门教程-文海思创 [文海思创讯]在Java文章频道里,我们大部分人应该对该语言都非常的了解,而且在该生态圈内至少已经呆了好几年了.这让我们有常规和专业 ...

  3. java如何查看调用记录_查看Java记录

    java如何查看调用记录 JEP 359 (可在JDK 14中用作预览功能)将记录引入Java. 记录是对普通数据聚合建模的简单方法. 一个简单的范围记录如下所示: record Range( int ...

  4. java反序列化异常接不到_由Java对象反序列化异常想到的

    今天写代码时候遇到一个异常,异常信息如下: Caused by: java.lang.RuntimeException: java.util.concurrent.ExecutionException ...

  5. webservice 暴漏接口_解决java web 项目发布webservice接口

    最近公司有一个需求,需要暴露当前web项目的接口给第三方系统调用,网上查到webservice是跨平台.跨语言的应用技术,所以作为首选. 查找了很多例子,都是很简单的加@WebService到类,加@ ...

  6. java方法的调用类型转换_关于java:实现接口,方法调用和类型转换的方法

    考虑以下代码 interface MyInterface{ void method(String s);// if we write static modifier we have compile e ...

  7. java set 接口_【Java提高十七】Set接口集合详解

    三.Set接口 Set是一种不包括重复元素的Collection.它维持它自己的内部排序,所以随机访问没有任何意义.与List一样,它同样运行null的存在但是仅有一个.由于Set接口的特殊性,所有传 ...

  8. java web怎么实现踢人_【Java】浅谈踢人下线的设计思路!(附代码实现方案)

    前言 前两天写了一篇文章,主要讲了下java中如何实现踢人下线,原文链接:java中如何踢人下线?封禁某个账号后使其会话立即掉线! 本来只是简单阐述一下踢人下线的业务场景和实现方案,没想到引出那么多大 ...

  9. 新手学java还是python知乎_学java好还是Python好?

    首先我简单的说下目前的市场发展行情,Java和Python发行时间都有很多年了,但是或许你自己也应该清楚,Python是什么时候开始步入我们的生活,步入我们的眼线的,对,就是近几年,这几年随着培训机构 ...

最新文章

  1. Android Studio调试功能使用总结
  2. Android初级开发笔记-- activity启动模式的学习(1)
  3. vysor原理以及Android同屏方案
  4. 数据结构之查找算法:散列查找
  5. ftp 425 Can't open data connection. 的解决方案
  6. 实验三:跟踪分析Linux内核的启动过程
  7. 超级终端secureCRT-下载及使用
  8. 感应(异步)电机磁场定向控制速度环PI控制参数设计
  9. 数据治理平台对比及atlas的安装和介绍
  10. 【微服务】Nacos 注册中心的设计原理
  11. H5支付(支付宝)开通流程
  12. html js更新数据不刷新页面,用javascript实现无刷新更新数据
  13. 小说程序源码 自动采集
  14. python循环5次_python基础-循环语句(5)
  15. kettle导数据入HBase数据库报错解决
  16. Kernel panic - not syncing: IO-APIC + timer doesn‘t work解决办法
  17. 2021高考萧山二中成绩查询,2021年杭州高考各高中成绩及本科升学率数据排名及分析...
  18. 理财系列 3 股票体检指标之市净率
  19. 【主动投资组合管理】第1章 绪论
  20. Citrix 相关资料整理

热门文章

  1. Django(part20)--数据库和模型
  2. 《乌合之众》读书笔记(part5)--名望的特性就是阻止我们看到事物的原本面目,彻底麻痹我们的判断力
  3. cmd长ping记录日志和时间_Gin 框架系列 — 路由中间件:日志记录
  4. go环境搭建_容器化 Go 开发环境的尝试
  5. delphi word类型_现在的女生喜欢什么类型的男生?|What Kind of Boys Do Girls Like?
  6. 用 ABAP 实现的报表欢迎屏幕 - Splash Screen
  7. orbeon form 的架构简介 - 如何访问用户通过 form 存储的数据
  8. 如何访问 SAP Screen Personas 培训系统以及完成一个最简单的例子
  9. SAP Commerce Cloud Storefront 框架选型:Accelerator 还是 Spartacus?
  10. 用SAP ALV Integrated Data Access展示CDS view数据的一些调试截图