web-dev-qa-db-fra.com

Comment vérifier si une instance est de type String ou GString dans Groovy

Je voudrais savoir quelle est la méthode robuste de vérification, si une variable est de type chaîne ou gstring. Je suppose que c'est différent de Java pur:

def var = someFunc();

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

Je demande, car je ne veux pas être surpris d'avoir manqué une fonctionnalité spécifique de Groovy qui provoque un bug difficile à déboguer.

32
Skarab

Les tests Instanceof devraient fonctionner:

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

Une autre façon consiste à utiliser le mot clé in:

groovy:000> t = "hello"
===> hello
groovy:000> t in String
===> true
groovy:000> "${t}" in GString
===> true

Le mot clé in est l'opérateur d'appartenance et est traduit en un appel isCase sur la classe:

groovy:000> String.isCase(t)
===> true
groovy:000> GString.isCase("${t}")
===> true

Vous pouvez également utiliser le .class méthode sur un objet Groovy

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

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

Notez qu'un GString est facilement évalué et transformé en String, par exemple par des appels à toString.

Si vous recherchez des fonctionnalités de type modèle pour avoir des définitions de chaînes réutilisables à transmettre et à exploiter, vous devriez envisager le moteur de modèle Groovy.

voir http://groovy.codehaus.org/Groovy+Templates

2
Al Baker