我正在实现一个接口,该接口定义了一种方法,如果参数无效,该方法可以引发异常.有效参数的构成取决于实现类.该接口还定义了一个isValid()方法,该方法可用于检查参数,但返回布尔值而不是引发异常.我发现实现这两种方法将导致大量重复.考虑下面的示例:

public class Something implements SomeInterface {

// Other class stuff

public void doTheThing(SomeParameter sp) throws SpecificRuntimeException {

if(sp == null) throw new ParameterCannotBeNullException();

if(sp.getNonZeroInt() == 0) throw new ShouldBeNonZeroException();

if(!sp.someOtherCondition()) throw new SomeConditionNotMetException();

...

}

public boolean isValid(SomeParameter sp) {

if(sp == null) return false;

if(sp.getNonZeroInt() == 0) return false;

if(!sp.someOtherCondition()) return false;

...

return true;

}

}

问题在于两种方法中的检查必须一致,并且本质上是重复的逻辑.我一直在尝试合并检查,以便两种方法都使用相同的检查,但是行为仍然保留.我考虑过的一些事情:

>在doTheThing()中包含if(!isValid(sp)这一行引发new RuntimeException();

>将异常抛出部分分为一个单独的私有方法,例如checkParameter()并在isValid()中执行:try {checkParameter(sp);返回true; } catch(SpecificRunTimeException e){返回false; }

1.的问题是特定的异常丢失了,我想提供尽可能详细的异常. 2.使用异常机制的问题似乎…某种程度上是错误的.这部分代码可能对性能敏感,因此我不想依赖根本上慢于某些东西的东西(如果我必须这样做,并且性能分析没有显示问题,那是很公平的.) ,但是如果有问题怎么办?).还是这种使用例外的性能影响可以忽略不计?

重构此代码以使用相同的有效性检查逻辑的最佳方法是什么?

java java 检查型异常_如何整合Java中的有效性检查和异常抛出?相关推荐

  1. python如何引发和处理异常_在python3.6中,如何捕捉异常并引发异常以便稍后处理?...

    假设我有两个例外:class FooError (Exception): def __init__(self, *args, **kwargs): default_message = 'A foo e ...

  2. java中在方法体内抛出异常_Java异常处理中___用于方法体内,抛出一个异常对象。...

    Java异常处理中___用于方法体内,抛出一个异常对象. 答: throw; 智慧职教: 运输高致病性动物病原微生物菌(毒)种或者样本的,与内包装要求错误的是 答:E.主容器表面标注"高致病 ...

  3. WCF客户端不能用在Using语句块中,因为它可能会抛出不可预知的异常。即使你捕获了异常,仍有可能一直保持连接。...

    WCF客户端不能用在Using语句块中,因为它可能会抛出不可预知的异常.即使你捕获了异常,仍有可能一直保持连接.让我们来看看形成这一问题的历史原因,并提出几个补救措施. 在.NET中,资源管理的基础就 ...

  4. java方法区内存泄露_深入理解java虚拟机-第二章:java内存区域与内存泄露异常...

    2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...

  5. synchronized 异常_由浅入深,Java 并发编程中的 Synchronized

    synchronized 作用 synchronized 关键字是 Java 并发编程中线程同步的常用手段之一. 1.1 作用: 确保线程互斥的访问同步代,锁自动释放,多个线程操作同个代码块或函数必须 ...

  6. sas java 虚拟机异常_深入理解JAVA虚拟机之异常诊断

    常见的JAVA虚拟机HotSpot虚拟机运行时数据库由5部分构成:方法区,堆,虚拟机栈,本地方法栈,程序计数器.下面列举各个部分可能出现的异常及其出现原因. 1.方法区存放的已被虚拟机加载的类型信息, ...

  7. java输入字符串异常_设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。...

    设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为"XYZ",则抛出一个异常信息"This is a XYZ",如果从命令 ...

  8. java捕获定时器抛出的异常_详细了解Java中定时器Timer的使用及缺陷分析

    在需要定时并且周期执行任务时,在最初的JAVA工具类库中,Timer可以实现任务的定时周期执行的需求,不过有一定的缺陷,比如,Timer是基于绝对时间而非相对时间,因此Timer对系统时钟比较敏感,本 ...

  9. 受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学

    来源:Lrwinlrwinx.github.io/2016/04/28/如何优雅的设计java异常/ 导语 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自 ...

最新文章

  1. HTML 5 中的新元素2
  2. Nat. Mach. Intell. | 集成深度学习在生物信息学中的发展与展望
  3. TypeScript基础入门 - 接口 - 继承接口
  4. oracle判断一个字符是否是数字
  5. 虚拟机VMware安装centos7详细步骤
  6. 【周末狂欢赛7】【NOIP模拟赛】七夕祭,齿轮(dfs),天才黑客
  7. iOS-BMK标注覆盖物
  8. GetOpenFileName 选择文件的窗口
  9. kubernetes Serverless、CaaS、FaaS是什么
  10. 2018Android面试宝典
  11. 烂土豆搭配令牌窃取提权dll劫持搭配令牌窃取提权不带引号服务路径问题提权不安全的服务权限配置提权
  12. html5游戏 美术,cocos2d-html5游戏学习之绘画小熊
  13. sql注入——布尔盲注
  14. [Caffe] Caffe介绍
  15. 中鑫优配热点前瞻:国防军工+数据安全+燃料电池+煤炭
  16. 计算机辅助的临床会谈,天智航参加第十九届国际计算机辅助骨科学术大会
  17. 使用PYTHON图像识别实现车牌号码识别的程序
  18. 数据库管理系统有哪些
  19. 看雪论坛 android,[分享] KSMA -- Android 通用 Root 技术
  20. Palette的简单使用

热门文章

  1. C语言、指针的指针和野指针的问题
  2. day46-CSS3新增功能
  3. SpringMVC 模型数据
  4. [Algorithm]一切始于ADT-表达式计算
  5. jquery判断toggle当前状态
  6. 关于bash的shellshock漏洞
  7. 五分钟实现网站安全 创新工场“安全宝”吸引大量用户
  8. 两个系统整合一起怎么说_结婚后该不该把父母接过来一起生活? 看看过来人是怎么说的...
  9. 360浏览器清除缓存_微信缓存清理教程
  10. gdal1.6linux编译,VS2015下编译64位GDAL总结