Как проверить, является ли экземпляр типа String или GString в Groovy - PullRequest
28 голосов
/ 17 июня 2011

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

def var = someFunc();

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

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

Ответы [ 3 ]

32 голосов
/ 17 июня 2011

Экземпляры тестов должны работать:

assert "fasd" instanceof String
assert "${this}" instanceof GString
13 голосов
/ 03 марта 2016

Другой способ - использовать ключевое слово 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
1 голос
/ 19 июня 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...