如何在groovy中指定字符文字?
既然“a”和“a”都是字符串,那么如何在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 {
我不想仅仅为了这个目的而声明字符变量。使用
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
;)