高效的错误处理是一项挑战,而且是应用开发团队必须直接面对的。然而,但是因为Java 5中对于枚举类型的介绍,敏捷开发团队开始意识到只有很少的资源密集型资源方法处理错误,而这些都会导致了枚举和异常的激烈辩论。
当谈及到设计模式和最佳实践时,例如像把读取与写入分开这样的想法就很好。其它一些想法,如限制开发者使用指针,这样的法很糟。最后,像青睐于异常超于枚举这样的想法,已经很老旧了。
异常很邪恶吗?
不仅异常邪恶,与之相关的堆栈及内存成本可能常常会导致使用异常特别昂贵。但是,不使用异常,是否有更好的方法来处理代码中意想不到的问题?确实是有的,为了展示更好的替代方案,通过观察异常究竟在使用和创建什么,来给讨论作一个基准。下面是一个简单的异常类:
public class Exceptional extends Exception { /* Often this is empty, as the only need is to create a new Exception type */ } |
使用异常来创建一个简单的响应的网络影响,就如我们想象的一样无知,是创建一个代码和内存沙洲。下面是创建处理异常的代码的一下典型的转换:
try { … } catch(Exceptional ex) { } catch(IOException ex) { } catch(Exception ex) { } |
如果开发人员只是想创建一个内部进程通信标志,那么为什么还要首先创建一个可抛出的类型对象?为什么不用一个枚举类型代替呢?
虽然枚举类型实质上是一个类,这个类是从异常相关的繁重的生命周期中脱离出来的:
public enum foonum { one, two, three; public static void SayHello(foonum val) { System.out.println(“Hello ” + val); } public void greeting() { System.out.println(“Greetings ” + this); } public static void main(String … args) { SayHello(foonum.two); foonum.two.greeting(); } } |
与其实中关键字new来创建实例,枚举本身中的每一个部件都是垃圾信赖(garbage reliant),而且准备好了为我们随时可用。
枚举类型的好处
曾经对高性能和效率给予关注的的C++开发人员,他们天生就能解决诸如运行时类型识别和异常。以这种方式关掉无用的膨胀功能,是C++永远比.NET或Java要快的一个原因。
但是因为枚举类型走入Java中要比C++晚,许多开发人员还在继续使用,这已经成为处理异常的一种传统方法了。但是使用枚举,正如下面例子一样,更加的有帮助:
public class Alternative { enum Exceptional { ea_Good, ea_Bad, ea_Ugly } public Exceptional Groovy() { return Exceptional.ea_Good; } } |
因此,与其在我们代码使用繁重的旧的方法,为什么不只返回一个开放式枚举代替呢?
public void Cool() { switch(Groovy()) { case ea_Good: break; case ea_Bad: break; case ea_Ugly: break; default: break; } } |
确实,如此的努力工作只是为了避免未来的异常,当使用一个转换时,默认块工作比任何类型的finally声明都努力,因为没有超级块标志需要设置:
boolean imadoofus = false; try { … } catch(Exceptional ex) { imadoofus = true; } catch(IOException ex) { imadoofus = true; } catch(Exception ex) { imadoofus = true; } finally { if(imadoofus) { … } } |
甚至自由使用单个枚举类型集合都能够使代码更加易读、易维护和更容易改进。每个开发人员都需要跟上,在标准更新时发生的连锁效应。保留创建自定义异常来管理不可恢复的错误,是开发人员需要适应的一个新实践。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
DevOps和敏捷相结合 改进软件质量
DevOps实际上是打破了开发人员和运维人员之间的壁垒。在运维团队,你所考虑的方面可能与开发团队不同。但如果我们能更加了解相互的工作,将会更为深入得理解所需的工具和设备。
-
协作对敏捷方法的重要性
协作的意思说是一起工作,而不是单独去完成某项任务。敏捷方法强调了与跨功能团队合作的好处,大大加强了业务负责人之间的沟通。
-
敏捷扩展的九条原则
对于敏捷扩展,并没有按部就班的方法,但有了固定的原则,软件开发团队将会有据可依地创建高质量的企业软件。
-
敏捷式 vs. 瀑布式:软件需求最佳方式
确定软件需求很困难。很好地理解客户需求,在改变发生时维护文档和需求都不是容易的事情。