Подтвердить что ты не робот

Как проверить, имеет ли экземпляр тип String или GString в Groovy

Я хотел бы узнать, какой надежный способ проверки, если переменная имеет тип string или gstring. Я полагаю, что это отличается от чистой Java:

def var = someFunc();

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

Я спрашиваю, потому что я не хочу удивляться, что я пропустил специальную функцию Groovy, которая вызывает отладочную ошибку.

4b9b3361

Ответ 1

Тесты должны работать:

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

Вы также можете использовать метод .class для объекта Groovy

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

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

Заметим, что a GString легко вычисляется и превращается в GString, например. по вызову toString.

Если вы ищете функциональность, подобную шаблону, чтобы иметь возможность повторного использования описаний строк и использовать ее, вам следует рассмотреть механизм шаблона Groovy.

см. http://groovy.codehaus.org/Groovy+Templates