Подтвердить что ты не робот

Как указать символьный литерал в groovy?

Как указать литерал символа в groovy, так как результат "a" и "a" в строке?

Я не хочу объявлять символьную переменную только для этой цели.

4b9b3361

Ответ 1

Если это для переменной, вы также можете определить тип, поэтому:

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

Это также противоречит второй строке вопроса, но я думал, что добавлю его для полноты

Ответ 2

Использование ключевого слова as - способ создания символьного литерала в Groovy.

'a' as char

См. обсуждение здесь в Groovy buglist.

Ответ 3

Этот ответ довольно поздний! Но просто наткнулся на него и хотел добавить некоторые разъяснения.

Более точный ответ отличается от 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