Rumah > Java > javaTutorial > Prinsip asas dan kaedah panggilan refleksi Java

Prinsip asas dan kaedah panggilan refleksi Java

王林
Lepaskan: 2023-12-23 09:01:07
asal
1141 orang telah melayarinya

. Melalui refleksi, kita boleh mencipta objek secara dinamik, kaedah panggilan, dapatkan/tetapkan sifat, dsb. pada masa jalan, yang meningkatkan fleksibiliti dan kebolehskalaan program. Artikel ini akan memperkenalkan prinsip asas refleksi Java dan memberikan contoh kod khusus.

Prinsip asas dan kaedah panggilan refleksi Java1. Prinsip asas refleksi

Pelaksanaan refleksi Java adalah berdasarkan kelas Kelas, yang merupakan kelas teras refleksi Java. Setiap kelas Java akan menjana objek Kelas yang sepadan selepas kompilasi maklumat Kelas boleh diperolehi melalui objek Kelas, dan operasi kelas boleh dilakukan melalui maklumat kelas.

Refleksi Java terutamanya mempunyai kelas teras dan antara muka berikut:


Kelas kelas: mewakili jenis kelas, yang merupakan titik masuk refleksi Java.


Kelas medan: mewakili pembolehubah ahli kelas.

Kelas kaedah: mewakili kaedah ahli kelas.

    Kelas pembina: Mewakili kaedah pembina kelas.
  1. Prinsip asas refleksi Java adalah seperti berikut: Pertama, dapatkan objek Kelas yang sepadan melalui nama kelas yang layak sepenuhnya atau kaedah getClass() objek kemudian, melalui beberapa kaedah kelas Kelas, seperti getFields(), getMethods(), dsb. Dapatkan Medan, Kaedah, Pembina dan objek lain akhirnya, lakukan operasi khusus melalui objek ini, seperti mendapatkan/menetapkan nilai harta, kaedah memanggil, mencipta objek, dsb.
  2. 2. Kaedah panggilan Refleksi
  3. 2.1 Dapatkan objek Kelas
  4. Objek Kelas yang sepadan boleh diperolehi melalui nama kelas yang layak sepenuhnya atau kaedah getClass() objek.
Kod sampel adalah seperti berikut:

// 通过类的全限定名获取Class对象
Class<?> clazz1 = Class.forName("com.example.User");

// 通过对象的getClass()方法获取Class对象
User user = new User();
Class<?> clazz2 = user.getClass();
Salin selepas log masuk

2.2 Mendapatkan nilai atribut

Nilai atribut objek boleh diperoleh melalui kaedah get() kelas Medan.

Kod sampel adalah seperti berikut:

// 获取public属性值
Field field = clazz.getDeclaredField("name");
String name = (String) field.get(user);

// 获取private属性值
Field privateField = clazz.getDeclaredField("age");
privateField.setAccessible(true); // 设置private属性的访问权限
int age = (int) privateField.get(user);
Salin selepas log masuk

2.3 Menetapkan nilai atribut

Nilai atribut objek boleh ditetapkan melalui kaedah set() kelas Medan.


Kod sampel adalah seperti berikut:

// 设置public属性值
Field field = clazz.getDeclaredField("name");
field.set(user, "Tom");

// 设置private属性值
Field privateField = clazz.getDeclaredField("age");
privateField.setAccessible(true); // 设置private属性的访问权限
privateField.set(user, 20);
Salin selepas log masuk

2.4 Kaedah panggilan

Kaedah objek boleh dipanggil melalui kaedah invoke() kelas Kaedah.


Kod sampel adalah seperti berikut:

// 调用无参方法
Method method1 = clazz.getDeclaredMethod("sayHello");
method1.invoke(user);

// 调用带参方法
Method method2 = clazz.getDeclaredMethod("sayHi", String.class);
method2.invoke(user, "Jack");
Salin selepas log masuk

2.5 Mencipta objek

Objek boleh dibuat melalui kaedah newInstance() kelas Pembina.


Kod sampel adalah seperti berikut:

Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, int.class);
User newUser = (User) constructor.newInstance("Lucy", 25);
Salin selepas log masuk

Ringkasan:

Refleksi Java ialah ciri berkuasa dalam bahasa Java, yang boleh memperoleh maklumat kelas secara dinamik dan mengendalikan ahli kelas pada masa jalan. Prinsip asas refleksi adalah untuk mendapatkan maklumat kelas melalui kelas Kelas dan melaksanakan operasi khusus melalui Medan, Kaedah, Pembina dan objek lain. Dalam aplikasi sebenar, kami boleh menggunakan mekanisme refleksi untuk merealisasikan pelbagai keperluan dinamik dan meningkatkan fleksibiliti dan skalabiliti program.

Atas ialah kandungan terperinci Prinsip asas dan kaedah panggilan refleksi Java. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan