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

问题描述 投票:0回答:4

我想了解检查变量是否为 string 或 gstring 类型的稳健方法是什么。我认为它与纯 Java 不同:

def var = someFunc();

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

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

groovy types
4个回答
44
投票

Instanceof 测试应该可以工作:

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

19
投票

另一种方法是使用

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

3
投票

您还可以在 Groovy 对象上使用

.class
方法

def a = "test"
def b = "${a}"

assert a.class == String
assert b.class == org.codehaus.groovy.runtime.GStringImpl

请注意,

GString
很容易评估并转换为
String
,例如致电
toString
.

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

Groovy
模板引擎。

参见 http://groovy.codehaus.org/Groovy+Templates


0
投票
def var = someFunc();

if (var.toString() == var) {
   def str = var;
}
© www.soinside.com 2019 - 2024. All rights reserved.