如何在groovy中指定字符文字,因为“a”和“a”都会在字符串中生成?
我不想仅为此目的声明一个字符变量。
答案 0 :(得分:53)
答案 1 :(得分:19)
如果这是一个变量,你也可以定义类型,所以:
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()
}
}
(对于长期的例子道歉,但我有脑冻结,并且想不到采用char
)的不同标准java函数; - )
这也违背了问题的第二行,但我认为我会将其添加为完整性
答案 2 :(得分:1)
有三种方法可以在Groovy中使用char文字:
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 */
如果您指定一个字符串文字,例如' c'对于变量,Groovy隐式地执行转换(请参阅/ * 1 * /)。如果你想使用没有变量的字符串文字,你必须使用...作为char ...(参见/ * 2 * /)或...(char)...(参见/ * 3 * / )。
由于Groovy只有String文字必须被转换为char,因此无法在不转换它们的方法中使用char文字。
println Character.getNumericValue('c') // compile error
答案 3 :(得分:0)
这个回应相当晚!但只是偶然发现它并希望补充一些说明。
更准确的答案与Java不同,Groovy没有字符文字,但您可以将字符串强制转换为字符。文字是一个完全按照它来解释的值,并且类型转换的必要性表明它不是真正的文字。
示例:
ConstraintSet.PARENT_ID
相比之下,groovy和Java都支持int,long,double和float的数字文字,但不支持数字文字。
示例:
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