[英]How to specify character literal in groovy?
如何在groovy中指定字符文字,因為字符串中的'a'和“a”都會產生?
我不想僅為此目的聲明一個字符變量。
如果這是一個變量,你也可以定義類型,所以:
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.