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

-20

somObject instanceof Date

должно быть

somObject instanceOf Date


11
Это не правильно. instanceofвсе должно быть в нижнем регистре.
cdeszaq
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.