【问题标题】:How to check if an instance is of type String or GString in Groovy如何在 Groovy 中检查实例是 String 类型还是 GString 类型
【发布时间】:2011-06-16 21:16:21
【问题描述】:

我想了解检查变量是否为字符串或 gstring 类型的可靠方法是什么。我想它与纯 Java 不同:

def var = someFunc();

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

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

【问题讨论】:

  • 令人失望的是没有更好的方法来做到这一点,例如var.isString()

标签: groovy types


【解决方案1】:

Instanceof 测试应该可以工作:

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

【讨论】:

    【解决方案2】:

    另一种方法是使用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

      【讨论】:

      • 你必须小心a 是Map,因为a.class 将返回null
      猜你喜欢
      • 2018-11-26
      • 2011-02-14
      • 2016-08-28
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多