Rumah > Java > javaTutorial > teks badan

Bagaimanakah saya boleh menggunakan Kaedah Peribadi Menggunakan Refleksi dalam Java Walaupun Sekatan Akses?

Susan Sarandon
Lepaskan: 2024-11-08 22:22:02
asal
488 orang telah melayarinya

How Can I Invoke Private Methods Using Reflection in Java Despite Access Restrictions?

Menggunakan Refleksi untuk Mendapat Kaedah Peribadi

Walaupun Java sekatan untuk mengakses kaedah persendirian melalui refleksi, terdapat penyelesaian untuk mengatasi had ini. Untuk menggunakan kaedah peribadi melalui refleksi, seseorang boleh memanfaatkan pendekatan berikut:

Pertama, dapatkan kaedah peribadi menggunakan getDeclaredMethod(String methodName) dan bukannya getMethod(String methodName). Kaedah ini membenarkan akses kepada kedua-dua kaedah awam dan peribadi yang diisytiharkan dalam kelas semasa.

Kemudian, untuk memintas sekatan akses lalai pada kaedah persendirian, gunakan kaedah setAccessible(boleh diakses boolean) untuk memberikan kebolehaksesan. Dengan menetapkan boleh diakses kepada benar, anda mengatasi tetapan perlindungan dan membenarkan penggunaan kaedah persendirian.

Akhir sekali, gunakan kaedah persendirian menggunakan invoke(Object object, Object... args) dengan objek yang dikehendaki dan mana-mana yang diperlukan argumen.

Berikut ialah versi kemas kini bagi kod yang disediakan dalam soalan asal:

Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);
Salin selepas log masuk

Kaveat:

  • getDeclaredMethod menyekat akses kepada kaedah yang diisytiharkan dalam kelas semasa, bukan kaedah yang diwarisi. Kaedah yang diwarisi memerlukan merentasi hierarki kelas konkrit.
  • SecurityManager berpotensi menghalang penggunaan setAccessible. Dalam kes sedemikian, pertimbangkan untuk menjalankan kod sebagai PrivilegedAction menggunakan AccessController atau Subject.

Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan Kaedah Peribadi Menggunakan Refleksi dalam Java Walaupun Sekatan Akses?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan