Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Memulihkan Pemanggil Kaedah Java Menggunakan Jejak Tindanan atau Refleksi?
Memulihkan Pemanggil Kaedah melalui Jejak Tindanan atau Refleksi
Keupayaan untuk mengenal pasti pemanggil kaedah boleh menjadi penting dalam pelbagai penyahpepijatan atau menjejaki senario. Nasib baik, Java menawarkan dua pendekatan utama untuk menangani cabaran ini: stacktrace dan reflection.
Stack Trace
The Thread.currentThread().getStackTrace() kaedah mengembalikan tatasusunan daripada objek StackTraceElement. Menurut dokumentasi Java, elemen terakhir tatasusunan ini mewakili bahagian bawah timbunan, yang merupakan penyeruan kaedah paling terkini.
Contoh:
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
Setiap StackTraceElement menawarkan beberapa kaedah pembantu untuk mendapatkan maklumat tentang tindanan bingkai:
Bergantung pada kes penggunaan tertentu, anda mungkin perlu mencuba untuk menentukan elemen mana dalam susunan stackTraceElements sepadan dengan pemanggil yang dikehendaki. Biasanya, ia akan berada di indeks [1] atau [2].
Refleksi
Sebagai alternatif, refleksi boleh digunakan untuk mengakses maklumat pemanggil. Dengan menggunakan kaedah getDeclaredMethod pada kelas yang dikehendaki, anda boleh mendapatkan semula objek Kaedah yang mewakili kaedah yang diminati. Kemudian, menggunakan kaedah getClass pada objek Kaedah, anda boleh mendapatkan objek Kelas untuk kelas pengisytiharan. Akhir sekali, menggunakan kaedah getName pada objek Kelas, anda boleh menentukan nama kelas kaedah panggilan.
Contoh:
Class<?> declaringClass = method.getDeclaringClass(); String callerClassName = declaringClass.getName();
Pilihan antara surih tindanan dan refleksi bergantung pada tahap butiran yang dikehendaki dan faktor lain. Walau bagaimanapun, kedua-dua pendekatan menyediakan mekanisme yang berkesan untuk mengesan pemanggil kaedah dalam Java.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulihkan Pemanggil Kaedah Java Menggunakan Jejak Tindanan atau Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!