Untuk apa instanceof
operator itu digunakan? Saya pernah melihat hal-hal seperti
if (source instanceof Button) {
//...
} else {
//...
}
Tetapi tidak ada yang masuk akal bagi saya. Saya sudah melakukan penelitian, tetapi muncul hanya dengan contoh tanpa penjelasan.
java
instanceof
Ben
sumber
sumber
instanceof
ketika menimpaequals
?Jawaban:
instanceof
kata kunci adalah operator biner yang digunakan untuk menguji apakah suatu objek (instance) adalah subtipe dari Tipe yang diberikan.Membayangkan:
Bayangkan sebuah
dog
objek , dibuat denganObject dog = new Dog()
, lalu:Namun, dengan
Object animal = new Animal();
,karena
Animal
merupakan supertipeDog
dan mungkin kurang "halus".Dan,
Ini karena
Dog
bukan subtipe atau supertipeCat
, dan juga tidak menerapkannya.Perhatikan bahwa variabel yang digunakan untuk di
dog
atas adalah tipeObject
. Ini untuk menunjukkaninstanceof
adalah operasi runtime dan membawa kita ke / use case: untuk bereaksi secara berbeda berdasarkan jenis objek saat runtime .Hal yang perlu diperhatikan:
expressionThatIsNull instanceof T
salah untuk semua JenisT
.Selamat coding.
sumber
Object dog = new Dog(); System.out.println(dog instanceof Cat);
. Ini mengkompilasi dengan baik dan mencetakfalse
. Kompiler tidak diperbolehkan menentukan pada waktu kompilasi yangdog
tidak bisa menjadi Kucing (sesuai aturan dalam JLS)boolean b = "foo" instanceof Integer;
Object indirect = ...; if (indirect instanceof Something)
. Ini bukan tentangif (literal instanceof Something)
seperti yang Anda asumsikan.Object dog
bagian itu. Salahku!dog instanceof Cat // does not even compile!
(karena ini adalah kelas). JikaCat
sebuah antarmuka maka itu akan dikompilasi.Ini adalah operator yang mengembalikan true jika sisi kiri ekspresi adalah turunan dari nama kelas di sisi kanan.
Pikirkan seperti ini. Katakanlah semua rumah di blok Anda dibangun dari cetak biru yang sama. Sepuluh rumah (objek), satu set cetak biru (definisi kelas).
instanceof
adalah alat yang berguna ketika Anda memiliki koleksi benda dan Anda tidak yakin benda apa itu. Katakanlah Anda memiliki koleksi kontrol pada formulir. Anda ingin membaca keadaan dicentang dari kotak centang apa pun yang ada, tetapi Anda tidak bisa meminta objek tua polos untuk keadaan dicentangnya. Sebagai gantinya, Anda akan melihat apakah setiap objek adalah kotak centang, dan jika ya, masukkan ke kotak centang dan periksa propertinya.sumber
instanceof
bisa membuatnya aman untuk downcast.Seperti yang dijelaskan di situs ini :
Saya harap ini membantu!
sumber
Operator ini memungkinkan Anda untuk menentukan jenis objek. Ia mengembalikan a
boolean
nilai.Sebagai contoh
outputnya adalah:
sumber
Jika
source
adalahobject
variabel,instanceof
adalah cara memeriksa untuk melihat apakah itu adalahButton
atau tidak.sumber
Seperti disebutkan dalam jawaban lain, penggunaan tipikal kanonik
instanceof
adalah untuk memeriksa apakah pengidentifikasi mengacu pada tipe yang lebih spesifik. Contoh:Namun perhatikan, bahwa jenis ekspresi tangan kiri haruslah tipe induk dari ekspresi tangan kanan (lihat JLS 15.20.2 dan Java Puzzlers, # 50, pp114 ). Misalnya, berikut ini akan gagal dikompilasi:
Ini gagal dikompilasi dengan pesan:
As
Test
bukan kelas induk dariString
. OTOH, ini mengkompilasi dengan sempurna dan mencetakfalse
seperti yang diharapkan:sumber
sumber
Dapat digunakan sebagai steno dalam pemeriksaan kesetaraan.
sumber
Kebanyakan orang dengan benar menjelaskan "Apa" dari pertanyaan ini tetapi tidak ada yang menjelaskan "Bagaimana" dengan benar.
Jadi inilah ilustrasi sederhana:
Output:
Alasan kesalahan kompiler ketika membandingkan
s
dengan StringBuffer dijelaskan dengan baik dalam dokumen :yang menyiratkan LHS harus berupa turunan dari RHS atau dari Kelas yang mengimplementasikan RHS atau memperluas RHS.
Bagaimana cara menggunakan instanceof itu?
Karena setiap Kelas memperluas Objek, ketik-casting LHS ke objek akan selalu bekerja sesuai keinginan Anda:
Output:
sumber
if ((Object)s instanceof StringBuffer) System.out.println("Instance of StringBuffer"); //shouldn't this be true
,, karena kami mengetikkan s ke Objek?http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
sumber
Instance dari kata kunci sangat membantu ketika Anda ingin mengetahui instance objek tertentu.
Misalkan Anda melempar pengecualian dan ketika Anda sudah menangkap maka lakukan operasi penjumlahan penjumlahan dan kemudian lanjutkan kembali sesuai logika Anda (melempar atau mencatat dll)
Contoh: 1) Pengguna membuat pengecualian khusus "InvalidExtensionsException" dan membuangnya sesuai logika
2) Sekarang di catch block catch (Exception e) {melakukan logika penjumlahan jika tipe pengecualian adalah "InvalidExtensionsException"
3) Jika Anda tidak memeriksa turunan dari dan tipe pengecualian adalah Null pointer exception, kode Anda akan rusak.
Jadi logika Anda harus berada di dalam instance of if (misalnya instance InvalidExtensionsException) {InvalidExtensionsException InvalidException = (InvalidExtensionsException) e; }
Contoh di atas adalah praktik pengkodean yang salah. Namun contoh ini membantu Anda untuk memahami penggunaan instance itu.
sumber
Penjelasan terbaik adalah jls . Selalu coba periksa apa yang dikatakan sumber. Di sana Anda akan mendapatkan jawaban terbaik dan banyak lagi. Mereproduksi beberapa bagian di sini:
sumber
instanceof
Operator java digunakan untuk menguji apakah objek adalah turunan dari tipe yang ditentukan (kelas atau subkelas atau antarmuka).Instanceof di java juga dikenal sebagai tipe
comparison operator
karena membandingkan instance dengan type. Ia mengembalikan salah satutrue
ataufalse
. Jika kami menerapkaninstanceof
operator dengan variabel apa pun yang memilikinull
nilai, ia akan kembalifalse
.Dari JDK 14+ yang termasuk JEP 305 kita juga dapat melakukan "Pencocokan Pola" untuk
instanceof
Pola pada dasarnya menguji bahwa suatu nilai memiliki tipe tertentu, dan dapat mengekstraksi informasi dari nilai tersebut ketika memiliki tipe yang cocok. Pencocokan pola memungkinkan ekspresi yang lebih jelas dan efisien dari logika umum dalam suatu sistem, yaitu penghapusan komponen dari objek secara bersyarat.
Sebelum Jawa 14
Java 14 perangkat tambahan
Kami juga dapat menggabungkan pemeriksaan tipe dan kondisi lainnya
Penggunaan pencocokan pola
instanceof
harus mengurangi jumlah keseluruhan gips eksplisit dalam program Java.PS :
instanceOf
hanya akan cocok ketika objek tidak nol, maka hanya itu yang dapat ditugaskanstr
.sumber
sumber
Contoh kode yang sangat sederhana:
Hati-hati di sini. Dalam contoh di atas, jika Class1 adalah Object, perbandingan pertama akan selalu benar. Jadi, seperti halnya dengan pengecualian, tatanan hierarkis juga penting!
sumber
Anda dapat menggunakan Peta untuk membuat abstraksi yang lebih tinggi pada contoh
Kemudian, minta peta semacam itu menambahkan beberapa tindakan:
Kemudian memiliki Objek dengan tipe yang tidak dikenal, Anda bisa mendapatkan tindakan spesifik dari peta itu:
sumber
Instance dari operator digunakan untuk memeriksa apakah objek adalah turunan dari tipe yang ditentukan. (kelas atau subkelas atau antarmuka).
Instanceof juga dikenal sebagai operator perbandingan tipe karena ia membandingkan instance dengan type. Ia mengembalikan benar atau salah.
Jika kita menerapkan instanceof operator dengan variabel apa pun yang memiliki nilai nol, ia mengembalikan false.
sumber