1. Pengenalan
Dalam tutorial ringkas ini, kita akan meneroka pelbagai cara untuk mencari jenis data di Groovy.
Sebenarnya, ia berbeza bergantung pada apa yang kita lakukan:
- Pertama, kita akan melihat apa yang harus dilakukan untuk primitif
- Kemudian, kita akan melihat bagaimana koleksi membawa beberapa cabaran unik
- Dan akhirnya, kita akan melihat objek dan pemboleh ubah kelas
2. Jenis Primitif
Groovy menyokong bilangan jenis primitif yang sama dengan Java. Kita dapat mencari jenis data primitif dalam tiga cara .
Sebagai permulaan, mari kita bayangkan kita mempunyai banyak gambaran mengenai usia seseorang.
Pertama sekali, mari kita mulakan dengan contoh operator:
@Test public void givenWhenParameterTypeIsInteger_thenReturnTrue() { Person personObj = new Person(10) Assert.assertTrue(personObj.ageAsInt instanceof Integer); }
instanceof adalah operator binari yang dapat kita gunakan untuk memeriksa apakah objek adalah contoh dari jenis tertentu. Ia mengembalikan benar jika objek itu adalah contoh jenis yang tertentu dan palsu sebaliknya.
Juga, Groovy 3 menambah baru ! Instanceof operator . Ia mengembalikan benar jika objek tidak adalah contoh jenis dan palsu sebaliknya.
Kemudian, kita juga boleh menggunakan kaedah getClass () dari kelas Objek. Ia mengembalikan kelas runtime contoh:
@Test public void givenWhenParameterTypeIsDouble_thenReturnTrue() { Person personObj = new Person(10.0) Assert.assertTrue((personObj.ageAsDouble).getClass() == Double) }
Akhir sekali, mari kita gunakan. pengendali kelas untuk mencari jenis data:
@Test public void givenWhenParameterTypeIsString_thenReturnTrue() { Person personObj = new Person("10 years") Assert.assertTrue(personObj.ageAsString.class == String) }
Begitu juga, kita dapat mencari jenis data dari jenis primitif.
3. Koleksi
Groovy memberikan sokongan untuk pelbagai jenis koleksi.
Mari tentukan senarai ringkas di Groovy:
@Test public void givenGroovyList_WhenFindClassName_thenReturnTrue() { def ageList = ['ageAsString','ageAsDouble', 10] Assert.assertTrue(ageList.class == ArrayList) Assert.assertTrue(ageList.getClass() == ArrayList) }
Tetapi pada peta, pengendali .class tidak dapat digunakan:
@Test public void givenGrooyMap_WhenFindClassName_thenReturnTrue() { def ageMap = [ageAsString: '10 years', ageAsDouble: 10.0] Assert.assertFalse(ageMap.class == LinkedHashMap) }
Dalam coretan kod di atas, ageMap.class akan cuba mendapatkan nilai kelas utama dari peta yang diberikan . Untuk peta, disarankan untuk menggunakan getClass () daripada .class .
4. Pembolehubah Objek & Kelas
Pada bahagian di atas, kami menggunakan pelbagai strategi untuk mencari jenis data primitif dan koleksi.
Untuk melihat bagaimana pemboleh ubah kelas berfungsi, anggaplah kita mempunyai Orang kelas :
@Test public void givenClassName_WhenParameterIsInteger_thenReturnTrue() { Assert.assertTrue(Person.class.getDeclaredField('ageAsInt').type == int.class) }
Ingat bahawa getDeclaredField () mengembalikan semua medan kelas tertentu.
Kita dapat mencari jenis objek dengan menggunakan operator instanceof, getClass () dan .class :
@Test public void givenWhenObjectIsInstanceOfType_thenReturnTrue() { Person personObj = new Person() Assert.assertTrue(personObj instanceof Person) }
Selain itu, kami juga boleh menggunakan pengendali keahlian Groovy dalam :
@Test public void givenWhenInstanceIsOfSubtype_thenReturnTrue() { Student studentObj = new Student() Assert.assertTrue(studentObj in Person) }
5. Kesimpulan
Dalam artikel pendek ini, kami melihat cara mencari jenis data di Groovy. Sebagai perbandingan, kaedah getClass () lebih selamat daripada pengendali .class . Kami juga membincangkan kerja dalam pengendali bersama-sama dengan instanceof operator. Selain itu, kami belajar bagaimana mendapatkan semua bidang dalam kelas dan menggunakan operator .type .
Seperti biasa, semua coretan kod boleh didapati di GitHub.