Як визначити тип даних?


176

Який найкращий спосіб визначити тип даних у groovy?

Я б хотів по-різному форматувати висновок, якщо це дата тощо.

Відповіді:


244

Для визначення класу об'єкта просто зателефонуйте:

someObject.getClass()

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

Якщо ви хочете перевірити, чи об’єкт реалізує певний інтерфейс чи розширює певний клас (наприклад, дата), використовуйте:

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