Comment puis-je spécifier un caractère littéral dans groovy puisque "a" et "a" donnent une chaîne?
Je ne veux pas déclarer une variable de caractère uniquement à cette fin.
S'il s'agit d'une variable, vous pouvez également définir le type, par exemple:
import Java.awt.image.*
new BufferedImage( 1, 1, BufferedImage.TYPE_INT_RGB ).with {
createGraphics().with {
// Declare the type
char aChar = 'a'
// Both ways are equivalent and work
assert fontMetrics.charWidth( aChar ) == fontMetrics.charWidth( 'a' as char )
dispose()
}
}
(Toutes mes excuses pour le long exemple, mais j’ai eu le cerveau gelé et je n’arrivais pas à penser à une fonction Java standard différente qui prend une char
) ;-)
Cela va également à l’encontre de la deuxième ligne de la question, mais j’ai pensé l’ajouter par souci
L'utilisation du mot clé as
permet de créer un littéral de caractère dans Groovy.
'a' as char
Voir la discussion ici à la liste de lecture de Groovy.
Il existe trois façons d'utiliser les littéraux de caractères dans Groovy:
char c = 'c' /* 1 */
'c' as char /* 2 */
(char) 'c' /* 3 */
println Character.getNumericValue(c) /* 1 */
println Character.getNumericValue('c' as char) /* 2 */
println Character.getNumericValue((char) 'c') /* 3 */
Si vous affectez un littéral de chaîne tel que 'c' à une variable, Groovy effectue le transtypage de manière implicite (voir/* 1 * /). Si vous voulez utiliser les littéraux de chaîne sans variables, vous devez les convertir en utilisant ... comme caractère ... (voir/* 2 * /) ou ... (caractère) ... (voir/* 3 */).
L'utilisation de littéraux char dans les méthodes sans les lancer n'est pas possible car Groovy n'a que des littéraux String qui doivent être convertis en caractères.
println Character.getNumericValue('c') // compile error
Cette réponse est plutôt tardive! Mais juste tombé sur elle et voulait ajouter quelques précisions.
La réponse la plus précise n’est pas Java, mais Groovy n’a PAS de caractère littéral, mais vous pouvez convertir une chaîne en caractère. Un littéral est une valeur écrite exactement telle qu'elle doit être interprétée, et la nécessité du transtypage de type indique qu'il N'EST PAS vraiment un littéral.
Exemples:
assert 'a'.class != Character.class
assert 'a'.class == String.class
assert ('a' as char).class == Character.class
assert ((char)'a').class == Character.class
char A = 'a'; // implicit coercion of string to char
assert A.class == Character.class
En revanche, groovy et Java prennent en charge les littéraux numériques pour int, long, double et float, mais ne prennent pas en charge le littéral numérique en abrégé.
Exemples:
assert 42.class == Integer.class
assert 42l.class == Long.class
assert 42f.class == Float.class
assert 42d.class == Double.class
assert (42 as Short).class == Short.class