java – assert(false)vs RuntimeException?
我正在阅读
XWalkUIClientInternal的源代码,我遇到了以下代码:
switch(type) { case JAVASCRIPT_ALERT: return onJsAlert(view,url,message,result); case JAVASCRIPT_CONFIRM: return onJsConfirm(view,result); case JAVASCRIPT_PROMPT: return onJsPrompt(view,defaultValue,result); case JAVASCRIPT_BEFOREUNLOAD: // Reuse onJsConfirm to show the dialog. return onJsConfirm(view,result); default: break; } assert(false); return false; 我从来没有真正看过这种技术,也没有真正考虑过它,但我想这实际上意味着“这是无法访问的代码,不应该永远发生”,无论如何都会崩溃应用程序.虽然技术上你可以用Throwable做到这一点,只要它没有被抓住. 所以我的问题是,哪一个更好,为什么,断言(假)或抛出RuntimeException,或者可能是一个错误? 解决方法
最大的区别
assert false; (不需要括号,断言不是函数,而是声明.)和 throw new RuntimeException(); 是断言可以被禁用.实际上,默认情况下它被禁用,除非JVM以-ea(“enable assertions”)标志启动.如果启用了断言,则断言false将无条件地抛出一个源自Error的 >错误可能无法检测到 因此,在上述情况下,我肯定会明确(更简洁) throw new AssertionError("invalid type " + type); 而不是断言后跟虚拟回报. 正如评论中所提到的,这假设类型是内部参数,无效值表示逻辑本身存在错误.如果它是输入参数,则应根据通常的规则进行验证,如果验证失败则抛出 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – Intermec打印机中的DP命令问题
- Java:Commons-Collections泛型:如何使自定义变换器工作
- java – 将SimpleDateFormat转换为DateTimeFormatter
- java – CopyOnWriteArrayList throwing CurrentModificati
- java – 错误的第一个参数类型
- Java实现批量导入excel表格数据到数据库中的方法
- java – 禁用JSpinner中的数字分组
- java – ivy:使用分类器从maven安装
- Hibernate hibernate.default_catalog属性:指定默认的表目
- jsf – 如何生成没有’id’和’autocomplete’属性的javax.