Как указать литерал символа в groovy, так как результат "a" и "a" в строке?
Я не хочу объявлять символьную переменную только для этой цели.
Как указать литерал символа в 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()
}
}
(извинения за длинный пример, но у меня замерзли мозги, и я не мог думать о другой стандартной java-функции, которая принимает char
); -)
Это также противоречит второй строке вопроса, но я думал, что добавлю его для полноты
Использование ключевого слова as
- способ создания символьного литерала в Groovy.
'a' as char
См. обсуждение здесь в Groovy buglist.
Этот ответ довольно поздний! Но просто наткнулся на него и хотел добавить некоторые разъяснения.
Более точный ответ отличается от 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