如何在groovy中指定字符文字?

如何在groovy中指定字符文字?,groovy,Groovy,既然“a”和“a”都是字符串,那么如何在groovy中指定字符文字 我不想仅仅为了这个目的而声明字符变量。使用as关键字是在Groovy中生成字符文本的方法 'a' as char 请参阅Groovy错误列表中的讨论。如果这是针对变量的,还可以定义类型,因此: import java.awt.image.* new BufferedImage( 1, 1, BufferedImage.TYPE_INT_RGB ).with { createGraphics().with {

既然“a”和“a”都是字符串,那么如何在groovy中指定字符文字


我不想仅仅为了这个目的而声明字符变量。

使用
as
关键字是在Groovy中生成字符文本的方法

'a' as char

请参阅Groovy错误列表中的讨论。

如果这是针对变量的,还可以定义类型,因此:

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()
    }
}
(对于这个冗长的示例,我深表歉意,但我的大脑已经僵住了,我想不出一个不同的标准java函数,它接受一个
char
);-)


这也与问题的第二行背道而驰,但为了完整起见,我想我应该添加它。

这个回答太晚了!但只是偶然发现了它,并想补充一些澄清

更准确的答案是,与Java不同,Groovy没有字符文字,但可以将字符串转换为字符。文字是一个完全按照要解释的内容编写的值,类型转换的必要性表明它不是真正的文字

示例:

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
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
相反,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
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

在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 */ 
如果将类似“c”的字符串文字赋值给变量,Groovy将隐式执行转换(请参见/*1*/)。如果要使用不带变量的字符串文字,必须使用…as char。。。(见/*2*/)或…(字符)。。。(见/*3*/)

在方法中使用char文本而不强制转换它们是不可能的,因为Groovy只有必须强制转换为char的字符串文本

println Character.getNumericValue('c') // compile error

是的,但它在注释中不起作用:
Groovyc:a应该是char类型的内联常量,而不是@MyAnnotation
中的字段表达式谁将char传递给注释?是的。我想在groovy中测试我的自定义注释,但由于字符问题没有管理它。而仅仅传递
'a'
也失败了吗?这听起来像是另一个问题,
newcharacter(char)
是一个很好的例子,它采用了
char
;)