Ответ 1
Тесты должны работать:
assert "fasd" instanceof String
assert "${this}" instanceof GString
Я хотел бы узнать, какой надежный способ проверки, если переменная имеет тип string или gstring. Я полагаю, что это отличается от чистой Java:
def var = someFunc();
if (var instanceof String || var instanceof GString) {
String str = var;
}
Я спрашиваю, потому что я не хочу удивляться, что я пропустил специальную функцию Groovy, которая вызывает отладочную ошибку.
Тесты должны работать:
assert "fasd" instanceof String
assert "${this}" instanceof GString
Другим способом является использование ключевого слова 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
Вы также можете использовать метод .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
.