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
的不安感依然存在