grails – 如何重载一些Groovy Type转换以避免NumberFormatExcep
发布时间:2020-12-14 16:32:07 所属栏目:大数据 来源:网络整理
导读:我厌倦了使用try / catch块封装asType的每个调用,如: def b = ""def c try { c = b as Integer}catch (NumberFormatException) { c = null}println c 相反,我想在我的代码中写下以下内容: def b = ""def c = b as Integer 如果b格式不正确,那么我想将null
我厌倦了使用try / catch块封装asType的每个调用,如:
def b = "" def c try { c = b as Integer } catch (NumberFormatException) { c = null } println c 相反,我想在我的代码中写下以下内容: def b = "" def c = b as Integer 如果b格式不正确,那么我想将null赋给c 那么如何为asType运算符重载此默认行为? 如果我为整个Grails应用程序执行此操作会有风险吗?或者是简单地创建我自己的方法(如asTypeSafe)并调用它的最佳解决方案? Groovy / Grails是否有一些关于Groovy类型转换的配置调整? 编辑(对实施答案感兴趣的人) String.metaClass.asTypeSafe = {Class c -> try { delegate.asType(c) } catch (Exception) { return null } } 我将其称为如下: def myNum = myStr.asTypeSafe(Integer) 解决方法
您可以通过提供新的asType实现来覆盖默认行为.确保保存旧的,并将其调用为您不想自己处理的其他类.例:
oldAsType = String.metaClass.getMetaMethod("asType",[Class] as Class[]) String.metaClass.asType = { Class c -> if (c == Integer) { delegate.isInteger() ? delegate.toInteger() : null } else { oldAsType.invoke(delegate,c) } } 至于这是否是一个好主意,只要记住很多对象将使用字符串,他们很可能会调用此转换并依赖于抛出的异常.你在很低的水平搞乱了. 如果从控制器传入一个params对象,Grails域对象将会进行大量的类型转换,但我认为它不会对这种事情进行任何类型的全局调整. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |