Saya berdiskusi dengan seorang rekan kerja hari ini, apakah penggunaan menggunakan operator Java instanceof
adalah semacam refleksi. Dan diskusi dengan cepat berkembang menjadi apa yang sebenarnya mendefinisikan refleksi.
Jadi, apa definisi refleksi?
Dan apakah penggunaan instanceof
dianggap "menggunakan refleksi"?
Dan selain itu, jika instanceof
dianggap sebagai refleksi, maka apakah polimorfisme tidak juga "menggunakan refleksi"? Jika tidak, apa bedanya?
java
language-agnostic
language-features
reflection
Bjarke Freund-Hansen
sumber
sumber
instanceof
merupakan contoh refleksi. Tentu saja itu adalah suatu tempat antara penggunaan data normal dan penggunaan metadata viagetClass()
& teman-teman, tetapi Anda dapat memiliki definisi yang bisa diterapkan dengan cara melayu.return
"pemrograman struktural" dianggap?Jawaban:
Ini adalah definisi refleksi menurut wikipedia:
Saya sendiri tidak bisa mengatakannya dengan lebih baik dan menyoroti bagian penting untuk pertanyaan Anda. Yang mengatakan, ya,
instanceof
dianggap menggunakan refleksi. Program mengamati strukturnya dan melakukan introspeksi jenis .sumber
if (true)
terlihat pada nilai , bukan pada tipe . Itu sebabnya itu tidak dianggap refleksi.Demi kejelasan, saya akan mempertimbangkan dua jawaban.
Secara teoritis ,
instanceof
adalah bentuk refleksi, seperti yang dijelaskan dalam jawaban Falcon .Namun, secara praktis , ketika seorang programmer berbicara tentang menggunakan refleksi ia biasanya merujuk lebih dari sekadar memeriksa apakah suatu variabel adalah tipe tertentu. Ini adalah konsep yang belum sempurna, yang tanpanya, polimorfisme tidak akan mungkin terjadi .
Perhatikan bahwa menggunakan
instanceof
sering menunjukkan bau kode, dan polimorfisme yang tepat sering dapat digunakan sebagai gantinya.sumber
Anda mungkin tertarik pada artikel berikut: http://java.sun.com/developer/technicalArticles/ALT/Reflection/
Kunci dalam artikel ini adalah potongan kode di mana mereka mensimulasikan kata kunci "instanceof" dengan menggunakan metode "isInstance" dari kelas "Class", yang merupakan bagian dari fitur refleksi Java.
sumber
Karena jawaban yang lain, definisi di Wikipedia telah diubah (Kebetulan saya setuju dengan perubahan ini, tetapi saya bukan orang yang membuatnya) untuk menghapus bagian dalam tanda kurung:
https://en.wikipedia.org/wiki/Type_introspection juga secara khusus mengatakan
Saya tidak akan mempertimbangkan
instanceof
untuk jatuh di bawah definisi pertama: program meneliti nilai, bukan struktur sendiri, dan tidak melibatkan nilai-nilai yang mewakili struktur program (di Jawa:java.lang.Class
,java.reflect.Method
, dll); ciri refleksi bekerja dengan nilai-nilai seperti itu.sumber
YA, operator "instanceof" merupakan bentuk refleksi. Jawaban sebelumnya memberi tahu Anda alasannya.
"Refleksi" atau "introspeksi objek / kelas" adalah hype akhir-akhir ini, tetapi beberapa bahasa pemrograman telah menggunakan beberapa konsep itu, sejak beberapa waktu.
DOT NET (Java clone), (mis) banyak menggunakan.
sumber