grails – 如何重载一些Groovy Type转换以避免NumberFormatException的trycatch?

grails – 如何重载一些Groovy Type转换以避免NumberFormatException的trycatch?,第1张

概述我厌倦了使用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格式不正确,那 我厌倦了使用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类型转换的配置调整?

编辑(对实施答案感兴趣的人)
基于接受的答案,我已将以下代码添加到我的bootstrap.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域对象将会进行大量的类型转换,但我认为它不会对这种事情进行任何类型的全局调整.

总结

以上是内存溢出为你收集整理的grails – 如何重载一些Groovy Type转换以避免NumberFormatException的try / catch?全部内容,希望文章能够帮你解决grails – 如何重载一些Groovy Type转换以避免NumberFormatException的try / catch?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存