Groovy / grails bagaimana cara menentukan tipe data?

176

Apa cara terbaik untuk menentukan tipe data di groovy?

Saya ingin memformat output secara berbeda jika ini kencan, dll.

Jack BeNimble
sumber

Jawaban:

244

Untuk menentukan kelas suatu objek cukup panggil:

someObject.getClass()

Anda dapat menyingkat ini someObject.classdalam banyak kasus. Namun, jika Anda menggunakan ini pada Mapitu akan mencoba untuk mengambil nilai dengan kunci 'kelas'. Karena itu, saya selalu menggunakan getClass()meskipun sedikit lebih lama.

Jika Anda ingin memeriksa apakah suatu objek mengimplementasikan antarmuka tertentu atau memperluas kelas tertentu (misalnya Tanggal) gunakan:

(somObject instanceof Date)

atau untuk memeriksa apakah kelas dari sebuah objek adalah persis kelas tertentu (tidak subclass dari itu), gunakan:

(somObject.getClass() == Date)
Dónal
sumber
2
instanceofsangat bagus untuk memfilter berdasarkan antarmuka.
cdeszaq
Setidaknya dalam Groovy terbaru (2.3.7), kita juga dapat menulis someObject.class
loloof64
5
@LaurentBERNABE yang berfungsi dalam kebanyakan kasus, tetapi tidak dalam semua kasus, misalnya sebuah Mapinstance
Dónal
Anda benar: kami mendapatkan nol dalam hal ini. Minta maaf atas kesalahan ini.
loloof64
Lalu apa ini? def test = {} println test.getClass() kelas Script1 $ _run_closure1 ??
Petrunov
33

Cara asyik sederhana untuk memeriksa jenis objek:

somObject in Date

Dapat diterapkan juga ke antarmuka.

Michal Z muda
sumber
3

Hanya untuk menambahkan opsi lain ke jawaban Dónal, Anda juga masih dapat menggunakan java.lang.Object.getClass()metode lama yang baik .

Pops
sumber
0

Anda dapat menggunakan isCase Keanggotaan Operator () yang merupakan cara asyik lainnya:

assert Date.isCase(new Date())
Ibrahim
sumber
-20

somObject instanceof Date

seharusnya

somObject instanceOf Date

Mike N
sumber
11
Ini tidak benar. instanceofsemua harus dalam huruf kecil.
cdeszaq