Groovy / Grails, jak określić typ danych?

176

Jaki jest najlepszy sposób na określenie typu danych w Groovy?

Chciałbym inaczej sformatować dane wyjściowe, jeśli jest to data itp.

Jack BeNimble
źródło

Odpowiedzi:

244

Aby określić klasę obiektu, po prostu wywołaj:

someObject.getClass()

W someObject.classwiększości przypadków można to skrócić do . Jeśli jednak użyjesz tego na a Map, spróbuje pobrać wartość za pomocą klucza „class”. Z tego powodu zawsze używam, getClass()chociaż jest trochę dłuższy.

Jeśli chcesz sprawdzić, czy obiekt implementuje określony interfejs lub rozszerza określoną klasę (np. Date) użyj:

(somObject instanceof Date)

lub aby sprawdzić, czy klasa obiektu jest dokładnie określoną klasą (a nie jej podklasą), użyj:

(somObject.getClass() == Date)
Dónal
źródło
2
instanceofświetnie nadaje się do filtrowania na podstawie interfejsu.
cdeszaq
Przynajmniej w najnowszym Groovym (2.3.7) możemy również napisać someObject.class
loloof64
5
@LaurentBERNABE, który działa w większości przypadków, ale nie we wszystkich, np. MapInstancja
Dónal,
Masz rację: w tym przypadku otrzymujemy zero. Przepraszam za błąd.
loloof64
Więc co to jest? def test = {} println test.getClass() class Script1 $ _run_closure1 ??
Petrunov
33

Prosty, świetny sposób na sprawdzenie typu obiektu:

somObject in Date

Może być stosowany również do interfejsów.

Michał Z Muda
źródło
3

Aby dodać kolejną opcję do odpowiedzi Dónal, nadal możesz użyć starej, dobrej java.lang.Object.getClass()metody.

Wyskakuje
źródło
0

Możesz użyć operatora członkostwa isCase (), który jest kolejnym fajnym sposobem:

assert Date.isCase(new Date())
Ibrahim.H
źródło
-20

somObject instanceof Date

Powinien być

somObject instanceOf Date

Mike N
źródło
11
To nie jest poprawne. instanceofwszystkie powinny być pisane małymi literami.
cdeszaq