Groovy / Grails, как определить тип данных?

176

Каков наилучший способ определения типа данных в Groovy?

Я хотел бы отформатировать вывод по-разному, если это дата и т. Д.

Джек БеНимбл
источник

Ответы:

244

Чтобы определить класс объекта просто позвоните:

someObject.getClass()

Вы можете сократить это someObject.classв большинстве случаев. Однако, если вы используете это на a, Mapон попытается получить значение с ключом 'class'. Из-за этого я всегда использую, getClass()хотя это немного дольше.

Если вы хотите проверить, реализует ли объект определенный интерфейс или расширяет определенный класс (например, Date), используйте:

(somObject instanceof Date)

или чтобы проверить, является ли класс объекта точно определенным классом (не его подклассом), используйте:

(somObject.getClass() == Date)
Донал
источник
2
instanceofотлично подходит для фильтрации на основе интерфейса.
cdeszaq
По крайней мере, в последнем Groovy (2.3.7) мы также можем написать someObject.class
loloof64
5
@LaurentBERNABE, который работает в большинстве случаев, но не во всех, например, в Mapэкземпляре
Dónal
Вы правы: в этом случае мы получим ноль. Извиняюсь за ошибку.
loloof64
Тогда что это? def test = {} println test.getClass() класс Script1 $ _run_closure1 ??
Петрунов
33

Простой способ проверки типа объекта:

somObject in Date

Может применяться и для интерфейсов.

Михал З муда
источник
3

Просто чтобы добавить еще один вариант ответа Доналя, вы также можете использовать старый добрый java.lang.Object.getClass()метод.

попса
источник
0

Вы можете использовать оператор членства isCase (), который является еще одним отличным способом:

assert Date.isCase(new Date())
Ibrahim.H
источник
-20

somObject instanceof Date

должно быть

somObject instanceOf Date

Майк Н
источник
11
Это не правильно. instanceofвсе должно быть в нижнем регистре.
cdeszaq