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

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

Susan Sarandon
Susan Sarandonasal
2024-11-08 22:22:02484semak imbas

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);

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!

Kenyataan:
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