Groovy 如何创建一个使用字符串的元类;数字和空值

Groovy 如何创建一个使用字符串的元类;数字和空值,groovy,metaclass,Groovy,Metaclass,使用数值字符串值和空值的元类 像这样的代码;请帮帮我 String.metaClass.formatx = { delegate.toString().replaceAll(/null/, '0.0').toFloat() } m= "4".formatx() m2=4.formatx() m3=null.formatx() 如果我是你,我会做以下事情: String.metaClass.formatx = { -> delegate.toFloat() } String a =

使用数值字符串值和空值的元类

像这样的代码;请帮帮我

String.metaClass.formatx = { delegate.toString().replaceAll(/null/, '0.0').toFloat() }


m= "4".formatx()

m2=4.formatx()
m3=null.formatx()

如果我是你,我会做以下事情:

String.metaClass.formatx = { -> delegate.toFloat() }

String a = "3"
String b = null

assert 3.0f == (a?.formatx() ?: 0.0f)
assert 0.0f == (b?.formatx() ?: 0.0f)
也就是说,使用
?:

如果您必须尝试捕获
null
,并格式化它,您可以执行以下操作:

但是在
NullObject
中添加一个方法感觉是错误的,我以前从未这样做过

编辑 这个比较短

import org.codehaus.groovy.runtime.NullObject

[String, Integer].each { it.metaClass.formatx = { -> delegate.toFloat() } }
NullObject.metaClass.formatx = { -> 0.0f }

println null.formatx()
println 3.formatx()
println "4".formatx()

如果我是你,我会做以下事情:

String.metaClass.formatx = { -> delegate.toFloat() }

String a = "3"
String b = null

assert 3.0f == (a?.formatx() ?: 0.0f)
assert 0.0f == (b?.formatx() ?: 0.0f)
也就是说,使用
?:

如果您必须尝试捕获
null
,并格式化它,您可以执行以下操作:

但是在
NullObject
中添加一个方法感觉是错误的,我以前从未这样做过

编辑 这个比较短

import org.codehaus.groovy.runtime.NullObject

[String, Integer].each { it.metaClass.formatx = { -> delegate.toFloat() } }
NullObject.metaClass.formatx = { -> 0.0f }

println null.formatx()
println 3.formatx()
println "4".formatx()

我举个例子,但我认为我使用了很多代码

我重复metaClass.formatx三次;我不知道是否可以使用或设置

import org.codehaus.groovy.runtime.NullObject

String.metaClass.formatx = { -> delegate.toString().replaceAll(/null/, '0.0').toFloat()  }
 NullObject.metaClass.formatx = { -> delegate.toString().replaceAll(/null/, '0.0').toFloat() }
Integer.metaClass.formatx = { -> delegate.toString().replaceAll(/null/, '0.0').toFloat() }

m2= 4.formatx()
m= "4".formatx()

 println null.formatx()
编辑


我举个例子,但我认为我使用了很多代码

我重复metaClass.formatx三次;我不知道是否可以使用或设置

import org.codehaus.groovy.runtime.NullObject

String.metaClass.formatx = { -> delegate.toString().replaceAll(/null/, '0.0').toFloat()  }
 NullObject.metaClass.formatx = { -> delegate.toString().replaceAll(/null/, '0.0').toFloat() }
Integer.metaClass.formatx = { -> delegate.toString().replaceAll(/null/, '0.0').toFloat() }

m2= 4.formatx()
m= "4".formatx()

 println null.formatx()
编辑


它应该怎么处理null?!将此函数与null值一起使用。toString().replaceAll(/null/,'0.0')。toFloat()转换为字符串将null字符串替换为0.0并转换为float它应该如何处理null?!将此函数与null值一起使用。toString().replaceAll(/null/,'0.0')。toFloat()转换为字符串将null字符串替换为0.0并转换为float非常感谢您的帮助;但是没有其他方法可以用更少的代码完成这项工作吗?非常感谢您的帮助;但是没有其他方法可以用更少的代码来实现这一点吗?请参阅对我的问题的编辑,该问题是关于如何在比您拥有的更短的时间内完成的。。。我对
NullObject
的不安感依然存在,但是我看到了我关于如何做的问题的编辑,比你看到的要短。。。然而,我对
NullObject
的不安感依然存在