繁体   English   中英

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

[英]How to specify character literal in groovy?

如何在groovy中指定字符文字,因为字符串中的'a'和“a”都会产生?

我不想仅为此目的声明一个字符变量。

使用as关键字是在Groovy中创建字符文字的方法。

'a' as char

见讨论这里的Groovy的buglist。

如果这是一个变量,你也可以定义类型,所以:

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函数);-)

这也与问题的第二行背道而驰,但我认为我会将其添加为完整性

有三种方法可以在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 * / )。

在没有强制转换方法的情况下在方法中使用char文字是不可能的,因为Groovy只有String文字,必须将其转换为char。

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

这种反应相当晚! 但只是偶然发现它并希望补充一些说明。

更准确的答案与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

相比之下,groovy和Java都支持int,long,double和float的数字文字,但简称不支持数字文字。

例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM