Saya mengalami masalah seperti ini dalam pekerjaan saya baru -baru ini:
Saya membuat alat uji untuk semua antarmuka dalam proyek tertentu. Menggunakan Java Swing Technology, proyek ini memiliki versi yang berbeda. Tidak semua antarmuka dalam versi adalah sama, dan alat yang saya buat perlu kompatibel dengan semua versi.
Jadi masalah ini diperkenalkan:
Jika beberapa antarmuka tidak ada dalam beberapa versi, kesalahan akan dilaporkan saat melakukan operasi ini melalui antarmuka. Oleh karena itu, agar dapat kompatibel dengan semua versi, Anda harus mempertimbangkan apakah metode tersebut ada sebelum memanggil metode tersebut. Pada saat yang sama, agar tidak melempar pengecualian selama kompilasi, saat memanggil metode
Ini juga perlu dipanggil melalui refleksi, dan implementasi spesifik adalah sebagai berikut:
1. Gunakan refleksi untuk menentukan apakah metode ada
/ *** Tentukan apakah metode ada** @param obj instance jobjectservice* @param MetodeName Metode Nama* @param Paratypes Metode Formulir Parameter Jenis Array* @return*/ public static boolean judgemethodisexist (objek obj, string methodname, class [] parueLean) {boolean hasil = true = true; coba {if (null! = obj) {metode metode = obj.getClass (). getMethod (methodName, paratypes); }} catch (nosuchmethodeException ex) {showwarninfo (ex.toString ()); log.Error ("Pengecualian terjadi di:" + mainjframe.hostname + "; detailnya adalah:" + ex.getMessage ()); hasil = false; } hasil pengembalian; }Deskripsi Parameter:
(1) OBJ: Objek yang menyebut metode
(2) MethodName: Nama metode yang akan dipanggil
(3) Paratypes: Jenis parameter yang diperlukan oleh metode ini (multipel adalah array)
Melalui metode ini, Anda dapat menentukan apakah metode MethodName (tipe parameter) yang Anda panggil melalui objek OBJ ada. Jika tidak ada, itu akan menjalankan pengecualian nosuchmethodexception
2. Panggil metode melalui refleksi untuk menghindari pengecualian waktu kompilasi
sysuser = mainjframe.getsysuser (); Class [] paramoBj = {string.class, long.class, string.class, string.class, int.class}; // menilai apakah metode ini ada boolean isexist = commonil.judgemethodisexist (sysuser, "createBucket", paramobj); if (isExist) {coba {// call class class clazz = sysuser.getClass (); // Metode Nama-Jenis parameter dalam metode (dalam urutan parameter) metode createBucket = clazz.getDecLaredMethod ("createBucket", string.class, long.class, string.class, string.class, int.class); int create = (int) createBucket.invoke (sysuser, bucketname, long.parselong (bucketsize), bucketloc, bucketacl, integer.parseint (stringutil.emptytozero (bucketcycle)))); if (create == 1) {commonutil.showinfo ("bucket dibuat berhasil"); log.info ("bucket dibuat dengan sukses"); } else {commonutil.showwarninfo ("Bucket Creation Gagal, Kesalahan Internal Server!"); log.info ("Bucket Creation Gagal, Kesalahan Internal Server"); }} catch (Exception ex) {commonutil.showwarninfo (ex.getMessage ()); log.Error ("Pengecualian terjadi di:" + mainjframe.hostname + "; detailnya adalah:" + ex.getMessage ()); }}Dalam kode di atas:
Baris 1: Sysuser objek yang memanggil metode CreateBucket Metode
Baris 2: Array tipe parameter dalam metode ini, digunakan saat menentukan apakah ada metode
Baris 3: Tentukan apakah ada metode dengan array objek, nama metode dan jenis parameter
Melalui tiga baris di atas, tugas -tugas berikut akan dieksekusi ketika metode ada. Jika tidak ada, informasi pengecualian akan diminta.
Baris 6: Dapatkan kelas objek
Baris 7: Dapatkan Objek Metode Metode, Parameter adalah tipe yang sesuai dengan nama metode dan parameter
Baris 8: Panggil metode CreateBucket melalui refleksi objek metode, parameter adalah objek Sysuser dan parameter (nilai) yang diperlukan masing -masing.
Melalui metode di atas, tidak ada pengecualian waktu kompilasi yang terjadi bahkan jika antarmuka dalam objek tidak ada.
Sejujurnya, ini adalah pertama kalinya saya mengalami masalah dengan refleksi Java dalam proyek saya, jadi perlu merekamnya!
Meringkaskan
Di atas adalah seluruh konten catatan aplikasi artikel ini tentang refleksi java dalam pekerjaan aktual. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke situs ini:
Tutorial Refleksi Java
Hal -hal yang perlu Anda ketahui tentang mekanisme refleksi java
Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!