java – 如何避免使用异常流控制?
我被分配了一个项目来开发一组充当存储系统的接口的类.一个要求是类支持具有以下签名的get方法:
public CustomObject get(String key,Date ifModifiedSince) 基本上,当且仅当对象在ifModifiedSince之后被修改时,该方法应该返回与该关键字关联的CustomObject.如果存储系统不包含密钥,则该方法应返回null. 我的问题是这样的: 如何处理密钥存在但对象尚未修改的情况? 这很重要,因为使用这个类的一些应用程序将是Web服务和Web应用程序.那些应用程序将需要知道是否返回404(未找到)304(未修改)或200(OK,这里是数据). 我正在衡量的解决方案是: >抛出一个自定义异常 我对这三个选项都不满意.我不喜欢选项1和2,因为我不喜欢使用例外流控制.当我的意图是表示没有价值时,我也不喜欢返回值. 不过,我倾向于选择3. 有没有选择我不考虑?有人对这三种选择有强烈的感觉吗? 这个问题的答案,释义: >提供一个包含 为什么我不能选择答案#1 我同意这是理想的解决方案,但我已经(不情愿地)被解雇了.这种方法的问题是,在大多数使用这些类的情况下,后端存储系统将是第三方远程系统,如Amazon S3.这意味着包含的方法将需要往返存储系统,这在大多数情况下应该是另一个往返行程.因为这样会花时间和金钱,所以不是一个选择. 如果不是这个限制,这将是最好的方法. (我意识到我没有提到这个问题的重要因素,但我正在努力保持简短,显然这是相关的.) 结论: 在阅读了所有答案之后,我得出结论,在这种情况下,包装是最好的方法.本质上,我将模仿HTTP,包含元数据(标题),包括响应代码和内容正文(消息). 解决方法
听起来你真的想要返回两个项目:响应代码和找到的对象.您可能会考虑创建一个轻量级的包装器,它们既可以同时保存,也可以将它们返回.
public class Pair<K,V>{ public K first; public V second; } 然后,您可以创建一个保存您的响应代码和数据的新对.作为使用泛型的副作用,您可以再次使用这个包装器来实现所需的任何对. 另外,如果数据没有过期,你仍然可以返回,但是给它一个303代码让他们知道它没有变化. 4xx系列将与null配对. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |