Rumah > Java > javaTutorial > Bagaimanakah Anda Boleh Menggunakan Kaedah Peribadi Menggunakan Refleksi di Jawa?

Bagaimanakah Anda Boleh Menggunakan Kaedah Peribadi Menggunakan Refleksi di Jawa?

Susan Sarandon
Lepaskan: 2024-11-22 07:52:18
asal
880 orang telah melayarinya

How Can You Invoke Private Methods Using Reflection in Java?

Invokasi Kaedah Peribadi melalui Refleksi

Di Java, penyeruan refleksi langsung kaedah persendirian tidak dibenarkan. Walau bagaimanapun, terdapat pendekatan alternatif untuk mencapai fungsi ini.

Pertimbangkan senario berikut di mana kaedah, yang pada mulanya ditakrifkan sebagai peribadi, perlu digunakan melalui refleksi:

Element node = outerNode.item(0);
String methodName = node.getAttribute("method");
String objectName = node.getAttribute("object");

if ("SomeObject".equals(objectName))
    object = someObject;
else
    object = this;

method = object.getClass().getMethod(methodName, (Class[]) null);
Salin selepas log masuk

Kod ini cuba untuk dapatkan rujukan kepada kaedah persendirian yang ditentukan oleh atribut "methodName". Walau bagaimanapun, pendekatan ini mencetuskan "NoSuchMethodException" kerana kaedah peribadi tidak boleh diakses melalui refleksi konvensional.

Untuk mengatasi had ini, kita boleh menggunakan kaedah getDeclaredMethod:

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

Kaedah getDeclaredMethod mendapatkan semula kaedah tanpa mengira keterlihatannya. Kaedah setAccessible membolehkan kami memintas sekatan akses peribadi dan menggunakan kaedah tersebut.

Awas:

  • getDeclaredMethod mencari kaedah yang diisytiharkan dalam kelas semasa sahaja. Untuk kaedah yang diwarisi, anda mungkin perlu merentasi hierarki kelas.
  • Sesetengah SecurityManagers mungkin melarang penggunaan setAccessible. Pertimbangkan untuk melaksanakan invokasi sebagai PrivilegedAction menggunakan AccessController atau Subject.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menggunakan Kaedah Peribadi Menggunakan Refleksi di Jawa?. 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