Groovy / grails come determinare un tipo di dati?


176

Qual è il modo migliore per determinare il tipo di dati in groovy?

Vorrei formattare l'output in modo diverso se si tratta di una data, ecc.

Risposte:


244

Per determinare la classe di un oggetto è sufficiente chiamare:

someObject.getClass()

È possibile abbreviare questo someObject.classnella maggior parte dei casi. Tuttavia, se lo usi su un Map, proverà a recuperare il valore con la chiave 'class'. Per questo motivo, lo uso sempregetClass() anche se è un po 'più lungo.

Se vuoi verificare se un oggetto implementa una particolare interfaccia o estende una particolare classe (es. Data) usa:

(somObject instanceof Date)

o per verificare se la classe di un oggetto è esattamente una classe particolare (non una sottoclasse di essa), usare:

(somObject.getClass() == Date)

2
instanceofè ottimo per il filtraggio basato sull'interfaccia.
cdeszaq,

Almeno nell'ultimo Groovy (2.3.7), possiamo anche scrivere someObject.class
loloof64

5
@LaurentBERNABE che funziona nella maggior parte dei casi, ma non in tutti, ad Mapesempio un'istanza
Dónal

Hai ragione: in questo caso otteniamo null. Chiedere scusa per l'errore.
loloof64,

Allora cos'è questo? def test = {} println test.getClass() class Script1 $ _run_closure1 ??
Petrunov,

33

Semplice modo groovy per verificare il tipo di oggetto:

somObject in Date

Può essere applicato anche alle interfacce.


3

Solo per aggiungere un'altra opzione alla risposta di Dónal, puoi anche usare ancora il buon vecchio java.lang.Object.getClass()metodo.


0

È possibile utilizzare IsCase () dell'operatore di appartenenza che è un altro modo interessante:

assert Date.isCase(new Date())

-20

somObject instanceof Date

dovrebbe essere

somObject instanceOf Date


11
Questo non è corretto instanceofdovrebbe essere tutto in minuscolo.
cdeszaq,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.