web-dev-qa-db-ja.com

インスタンスがGroovyのString型またはGString型であるかどうかを確認する方法

変数が文字列型またはgstring型である場合、堅牢なチェック方法を学習したいと思います。私はそれが純粋なJavaとは異なると思う:

def var = someFunc();

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

デバッグが難しいバグの原因となるGroovy固有の機能を見逃してしまったことに驚いたくないので、お願いします。

30
Skarab

Instanceofテストは動作するはずです:

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

別の方法は、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

GStringは簡単に評価され、Stringに変換されることに注意してください。 toStringの呼び出しによって。

再利用可能な文字列定義を渡して活用するテンプレートのような機能を探している場合は、Groovyテンプレートエンジンを検討する必要があります。

http://groovy.codehaus.org/Groovy+Templates を参照してください

2
Al Baker