cerminan
Refleksi: Peta properti dan metode kelas menjadi kelas yang sesuai.
Penggunaan Refleksi Dasar
Ada tiga cara untuk mendapatkan kelas kelas:
Tulis saja sesuai dengan API, proses umumnya adalah:
Gunakan tipe parameter dari metode untuk secara unik mengidentifikasi metode, berdasarkan: kelebihan metode
Refleksi array
Contoh berikut terutama menggambarkan beberapa poin:
Public Class ReflectTest {public static void main (string [] args) {int [] a1 = new int [] {1,2,3}; int [] a2 = int baru [5]; int [] [] a3 = int baru [2] [3]; System.out.println (a1.getClass () == a2.getClass ()); // true system.out.println (a1.getClass ()); // class [i system.out.println (a3.getClass ()); // class [[i system.out.println (a1.getClass ()); a3.getClass (). getSuperclass ()); // true system.out.println (a2.getClass (). getSuperclass ()); // class java.lang.object // Kalimat berikutnya tidak mengkompilasi: Kesalahan: (15, 42) Java: Telang#, Java#, Java#, Java#, Java.Lang. memperluas int []> dan java.lang.class <Capture#2, total? memperluas int [] []> //system.out.println (a1.getClass () == a3.getClass ()); Objek [] b3 = a3; // dikompilasi oleh // kalimat berikutnya tidak lulus kesalahan: (17, 24) java: tipe yang tidak kompatibel: int [] tidak dapat dikonversi ke java.lang.object [] // objek [] b1 = a1; String S1 = "ABC"; System.out.println (arrays.aslist (a1)); // [[i@1540e19d] system.out.println (arrays.aslist (s1)); // [abc]}}Keluaran:
trueclass [iClass [[itrueclass java.lang.object [[i@1540e19d] [ABC]
Input: HashCode dan masalah bocor memori merujuk ke Java API:
Jika variabel anggota yang berpartisipasi dalam perubahan perhitungan HASCODE di tengah, penghapusan berikutnya gagal, menghasilkan kebocoran memori
Pemuatan file konfigurasi
Loader kelas memuat nama kelas konfigurasi baca-hanya name.class.getClassLoader (). GetResourceAsstream (str);
Name.class.getResourCeasStream (str), pada dasarnya memanggil class loader. Sumber Code Intercept (class.java di bawah paket java.lang):
inputStream publik getResourCeAsstream (nama string) {name = resolvename (name); Classloader cl = getClassLoader0 (); if (cl == null) {// kelas sistem. return classloader.getsystemResourceAsstream (name); } return cl.getResourCeasStream (name);}Mengenai jalan, metode penulisan sedikit khusus.
Di masa lalu, saat menyusun kode java, beberapa conf/ folder harus ditambahkan ke dependensi atau ditandai sebagai folder sumber. Mereka jelas file XML, tetapi tidak ada kode sumber Java. Dari sini, saya sekarang tahu bahwa itu karena menggunakan refleksi untuk memuat file konfigurasi
Inspektur & Javabean
Proses Javabean Membaca Nilai Atribut X: Kapitalisasi, Awalan, dan Metode Perolehan.
"x"-> "x"-> "getx"-> "methodgetx"
Saya belum menggunakannya untuk mengoperasikannya sendiri dengan introspeksi saat ini, jadi saya tidak akan menempelkan kode lagi, hanya kelas inti yang dilampirkan
Implementasi Sederhana: Gunakan Java.Beans.PropertyDescriptor Class
Implementasi Masalah: Gunakan kelas java.beans.introspector untuk melintasi nilai pengembalian metode getBeanInfo
Javabean harus memiliki konstruktor tanpa parameter
Menggunakan Toolkit Beanutils