Java Reflection: Membongkar Nama Pembolehubah Setempat
Java Reflection menyediakan mekanisme yang berkuasa untuk memeriksa dan memanipulasi metadata kelas, kaedah dan medan pada masa larian. Walau bagaimanapun, mengakses nama pembolehubah tempatan secara historis memberikan cabaran.
Pendekatan Warisan Menggunakan Kejuruteraan Bytecode
Sebelum Java 8, fail kelas yang dijana oleh pengkompil mengandungi maklumat tentang nama pembolehubah tempatan. Walau bagaimanapun, maklumat ini sering dioptimumkan untuk menjimatkan ruang. Namun begitu, perpustakaan kejuruteraan bytecode seperti ASM boleh digunakan untuk memeriksa atribut jadual pembolehubah tempatan dalam fail kelas, mengekstrak nama pembolehubah jika ada. Pendekatan ini sesuai terutamanya untuk alat pembangunan dan bukannya kod pengeluaran.
Java 8 dan Seterusnya: Membongkar Nama Parameter
Dengan pengenalan Java 8, sokongan terhad untuk tempatan nama pembolehubah telah ditambah. Khususnya, nama parameter, yang merupakan jenis khas pembolehubah tempatan, kini boleh diakses melalui refleksi. Ini membolehkan penggantian anotasi seperti @ParameterName digunakan dalam bekas suntikan kebergantungan.
Pelaksanaan Praktikal
Untuk menggambarkan penggunaan sokongan Java 8 untuk nama parameter, pertimbangkan perkara berikut kod:
public void baz(Foo... foos) { for (Foo foo : foos) { // Print the name of each foo - b, a, and r System.out.println(foo.getName()); } }
Dalam contoh ini, kami menganggap bahawa setiap tika Foo mempunyai kaedah getter bernama getName(). Menggunakan refleksi, kita boleh mendapatkan semula nama parameter kaedah baz:
Method method = MyClass.class.getMethod("baz", Foo[].class); for (Parameter parameter : method.getParameters()) { System.out.println(parameter.getName()); }
Pendekatan ini akan mencetak nama parameter, yang dalam kes ini akan menjadi "foos." Walaupun ia tidak menyediakan penyelesaian lengkap untuk mengakses nama semua pembolehubah tempatan, ia mewakili peningkatan yang berguna kepada keupayaan Java Reflection dalam konteks akses parameter.
Atas ialah kandungan terperinci Bolehkah Java Reflection Mengakses Nama Pembolehubah Tempatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!