如何在Groovy中检查实例的类型是String还是GString



如果变量的类型是字符串或gstring,我想了解一下稳健的检查方法是什么。我想这与纯Java中的不同:

def var = someFunc();
if (var instanceof String || var instanceof GString) {
   String str = var;
}

我之所以这么问,是因为我不想因为错过了一个导致难以调试的bug的Groovy特定功能而感到惊讶。

测试实例应该有效:

assert "fasd" instanceof String
assert "${this}" instanceof GString

另一种方法是使用in关键字:

groovy:000> t = "hello"
===> hello
groovy:000> t in String
===> true
groovy:000> "${t}" in GString
===> true

in关键字是成员运算符,并被转换为类上的isCase调用:

groovy:000> String.isCase(t)
===> true
groovy:000> GString.isCase("${t}")
===> true

您还可以在Groovy对象上使用.class方法

def a = "test"
def b = "${a}"
assert a.class == String
assert b.class == org.codehaus.groovy.runtime.GStringImpl

注意,例如通过调用toString,可以容易地评估GString并将其转换为String

如果您正在寻找类似模板的功能,以具有可重用的字符串定义来传递和利用,那么您应该考虑Groovy模板引擎。

参见http://groovy.codehaus.org/Groovy+模板

相关内容

最新更新