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.

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)

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.


3

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


0

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

assert Date.isCase(new Date())

-20

somObject instanceof Date

Powinien być

somObject instanceOf Date


11
To nie jest poprawne. instanceofwszystkie powinny być pisane małymi literami.
cdeszaq
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.