MENU

Refleksi Java menjadi mudah

Daftar isi

Refleksi Java menjadi mudah

JawadaricerminanMemperkenalkan kelas utilitas yang memungkinkan Anda menggunakan API dengan mudah.

Apa itu refleksi?

API Refleksigigi,"Java.lang.reflect” termasuk dalam paket,
Ini adalah API yang mengambil informasi seperti bidang dan metode dari kelas Java.
Kelas-kelas berikut ini terutama digunakan.

  • java.lang.Kelas
  • java.lang.reflect.Constructor
  • java.lang.reflect.Metode
  • java.lang.reflect.Field

cerminanDengan menggunakan , Anda dapat membuat kelas atau memanggil metode tanpa harus mengkodekannya secara langsung.
Anda dapat membuat instance kelas dari string atau menjalankan suatu metode.

Dengan menulis definisi nama kelas dan nama metode dalam file eksternal seperti XML, Anda dapat secara dinamis menyesuaikan aplikasi dengan perubahan lingkungan selama runtime.
Ini juga merupakan API yang sangat efektif untuk membangun aplikasi yang sangat fleksibel.


Tujuan refleksi

cerminantidak sering digunakan langsung oleh pengguna,
Ini banyak digunakan dalam aplikasi web seperti Struts dan kerangka kerja seperti pemetaan O/R.

Misalnya, ketika secara otomatis mengatur data input layar web ke properti JavaBeans,
Ini digunakan ketika mengeluarkan SQL yang secara otomatis diperbarui berdasarkan properti JavaBeans.

Selain itu, fungsi seperti memuat dan mendaftarkan plug-in secara dinamis yang memperluas fungsionalitas saat aplikasi dimulai juga tersedia.cerminanHal ini dapat dengan mudah dicapai dengan menggunakan .

Menjalankan sampel

Silakan jalankan contoh dan rasakan pemrograman seperti kerangka kerja.

Di sini kita menggunakan kelas berikutcerminanMenunjukkan penggunaan utilitas yang sederhana.

Main.java...Kelas yang akan dieksekusi
BeanUtil.java...Kelas utilitas refleksi
FreeSoft.java...Digunakan sebagai refleksi di kelas yang mewakili perangkat lunak bebas.

●Bila dijalankan secara normal

Sistem.keluar.println(“>>>Kasus biasa”);
FreeSoft freeSoft = FreeSoft baru();
freeSoft.setName(“Obrolan & Messenger Obrolan dan Messenger !!”);
freeSoft.showName();
freeSoft.showPrice(0);

●Saat dieksekusi menggunakan refleksi

Sistem.keluar.println(“>>>Saat menggunakan refleksi”);
//Buat sebuah instance dari kelas FreeSoft
Objek invokeObject = BeanUtil.newInstance(“Perangkat Lunak Gratis”);
//Tetapkan nilai pada kolom nama.
BeanUtil.setProperty(invokeObject, "nama" , “Obrolan & Obrolan Messenger dan Messenger !!”);
// Jalankan metode showName() FreeSoft.
BeanUtil.invoke(invokeObject, “nama acara”, batal);
// Jalankan metode showPrice() FreeSoft.
// Jika metode mempunyai argumen, argumen tersebut harus diteruskan sebagai array tipe Objek.
BeanUtil.invoke(invokeObject, “harga pertunjukan”,Objek baru[]{Integer baru(0)});

●Hasil eksekusi

Hasil eksekusinya sama baik dalam kasus normal maupun saat menggunakan refleksi.

>>> Kasus biasa

Nama perangkat lunak: Obrolan & Messenger Obrolan dan messenger! !

Harga: 0 yen

>>> Saat menggunakan refleksi

Nama perangkat lunak: Obrolan & Messenger Obrolan dan messenger! !

Harga: 0 yen

Detail metode BeanUtil

contoh baru

objek statis publik contoh baru(String className) memunculkan Pengecualian
Menghasilkan dan mengembalikan sebuah instance dari string "className".

Parameter:
nama kelas – Nama kelas yang sepenuhnya memenuhi syarat
Nilai pengembalian:
Sebuah contoh baru dari nama kelas yang sepenuhnya memenuhi syarat
pengecualian:
Pengecualian

contoh baru

objek statis publik contoh baru(String className, Object[] argObj) memunculkan Pengecualian
Menghasilkan dan mengembalikan sebuah instance dari string "className".

Parameter:
nama kelas – Nama kelas yang sepenuhnya memenuhi syarat
argObj – Argumen konstruktor
Nilai pengembalian:
Sebuah contoh baru dari nama kelas yang sepenuhnya memenuhi syarat
pengecualian:
Pengecualian

contoh baru

objek statis publik contoh baru(Kelas clazz) melempar Pengecualian
Menghasilkan dan mengembalikan sebuah instance dari kelas "clazz".

Parameter:
keren - kelas
Nilai pengembalian:
contoh baru clazz
pengecualian:
Pengecualian

contoh baru

objek statis publik contoh baru(Kelas clazz, Objek[] argObj) memunculkan Pengecualian
Menghasilkan dan mengembalikan sebuah instance dari kelas "clazz".

Parameter:
keren - kelas
argObj – Argumen konstruktor
Nilai pengembalian:
contoh baru clazz
pengecualian:
Pengecualian

setProperti

kekosongan statis publik setProperti(Objek invokeObject, String fieldName, Nilai objek) memunculkan Pengecualian
Panggil metode penyetel bidang "fieldName" dari objek "invokeObject" dan simpan nilai "value".

Jika tidak ada metode penyetel, nilai akan ditetapkan langsung ke kolom. Namun, dalam kasus ini, pengubah akses properti target harus bersifat publik.

Parameter:
memanggilObjek – Objek yang akan dieksekusi
Nama bidang – Nama properti objek yang akan dieksekusi
nilai – Nilai yang akan ditetapkan
pengecualian:
Pengecualian – Pengecualian berikut terjadi.
InvocationTargetException – Jika metode yang mendasari memunculkan pengecualian
IlegalAccessException – Objek Metode ini adalah Java
Ketika kontrol akses bahasa diterapkan dan metode yang mendasarinya tidak dapat diakses
Tidak AdaMetodePengecualian – Jika metode dengan nama yang ditentukan tidak ditemukan

dapatkan Properti

objek statis publik dapatkan Properti(Objek invokeObject, String fieldName) memunculkan Pengecualian
Memanggil metode pengambil bidang fieldName objek invokeObject untuk mendapatkan nilai.
Jika tidak ada metode pengambil, nilai akan diambil langsung dari kolom. Namun, dalam kasus ini, pengubah akses properti target harus bersifat publik.

Parameter:
memanggilObjek – Objek yang akan dieksekusi
Nama bidang – Nama properti objek yang akan dieksekusi
Nilai pengembalian:
Nilai pengembalian metode pengambil
pengecualian:
Pengecualian – Pengecualian berikut terjadi.
InvocationTargetException – Jika metode yang mendasari memunculkan pengecualian
IlegalAccessException – Objek Metode ini adalah Java
Ketika kontrol akses bahasa diterapkan dan metode yang mendasarinya tidak dapat diakses
Tidak Ada Pengecualian Bidang Tersebut – Jika field dengan nama yang ditentukan tidak ditemukan

memohon

objek statis publik memohon(Objek invokeObject, String callMethod, Object[] argObjects) melempar InvocationTargetException, IllegalAccessException, NoSuchMethodException
Menjalankan metode "callMethod" dari objek "invokeObject".
Jika ada nilai kembalian, maka dapat diperoleh sebagai Objek.

Parameter:
memanggilObjek – Objek yang akan dieksekusi
metode panggilan – Nama metode yang akan dieksekusi
argObjects – Jika ada argumen, teruskan argumen tersebut sebagai array objek. Jika tidak ada argumen, berikan null.
Nilai pengembalian:
Nilai kembalian dari mengeksekusi "callMethod"
pengecualian:
InvocationTargetException – Jika metode yang mendasari memunculkan pengecualian
IlegalAccessException – Objek Metode ini adalah Java
Ketika kontrol akses bahasa diterapkan dan metode yang mendasarinya tidak dapat diakses
Tidak AdaMetodePengecualian – Jika metode dengan nama yang ditentukan tidak ditemukan

temukanMetode

metode statis publik temukanMetode(Objek invokeObject, String callMethod, Object[] argObjects) melempar NoSuchMethodException
Cari metode 'callMethod' dari objek 'invokeObject'.

Parameter:
memanggilObjek – Objek yang akan dieksekusi
metode panggilan – Nama metode objek yang akan dieksekusi
argObjects – Jika ada argumen, teruskan argumen tersebut sebagai array objek. Jika tidak ada argumen, berikan null.
Nilai pengembalian:
Objek Metode yang cocok dengan kondisi argumen yang ditentukan
pengecualian:
Tidak AdaMetodePengecualian – Jika tidak ditemukan metode yang cocok, atau jika namanya “” atau “”

setField

kekosongan statis publik setField(Objek invokeObject, String fieldName, Nilai objek) melempar IllegalAccessException, NoSuchFieldException
Menyimpan nilai "value" dalam nama field "fieldName" dari objek yang akan dieksekusi "invokeObject".

Parameter:
memanggilObjek – Objek yang akan dieksekusi
Nama bidang – Nama bidang objek yang akan dieksekusi
nilai – Nilai yang akan ditetapkan
pengecualian:
IlegalAccessException – Bidang yang menjadi dasar objek tertentu (atau subkelas atau pelaksananya)
bukan merupakan turunan dari kelas atau antarmuka yang dideklarasikannya, atau jika konversi pembukaan bungkusnya gagal
Tidak Ada Pengecualian Bidang Tersebut – Jika field dengan nama yang ditentukan tidak ditemukan

dapatkanField

objek statis publik dapatkanField(Objek invokeObject, String fieldName) memunculkan IllegalAccessException, NoSuchFieldException
Mendapatkan nilai nama field "fieldName" dari objek yang akan dieksekusi "invokeObject".

Parameter:
memanggilObjek – Objek yang akan dieksekusi
Nama bidang – Nama bidang objek yang akan dieksekusi
Nilai pengembalian:
nilai kembalian
pengecualian:
IlegalAccessException – Bidang yang menjadi dasar objek tertentu (atau subkelas atau pelaksananya)
bukan merupakan turunan dari kelas atau antarmuka yang dideklarasikannya, atau jika konversi pembukaan bungkusnya gagal
Tidak Ada Pengecualian Bidang Tersebut – Jika field dengan nama yang ditentukan tidak ditemukan

hasField

boolean statis publik hasField(Objek objek, String fieldName) memunculkan Pengecualian
Memeriksa apakah objek 'objek' mendeklarasikan nama bidang 'Namabidang'.

Parameter:
obyek – Objek yang akan diperiksa
Nama bidang – Nama bidang yang akan diperiksa
Nilai pengembalian:
benar jika dinyatakan
pengecualian:
Pengecualian

dapatkanSemua Bidang

java.util.TreeSet statis publik dapatkanSemua Bidang(Objek objek) melempar Pengecualian
Parameter:
obyek
Nilai pengembalian:
pengecualian:
Pengecualian

dapatkanShortClassName

String statis publik dapatkanShortClassName(Objek objek)
Mendapatkan nama kelas yang tidak memenuhi syarat dari suatu objek.

Parameter:
obyek
Nilai pengembalian:

dapatkanShortClassName

String statis publik dapatkanShortClassName(String nama kelas)
Mendapatkan nama kelas dari nama yang sepenuhnya memenuhi syarat.

Parameter:
nama kelas
Nilai pengembalian:

dapatkan Nama Bidang

String statis publik dapatkan Nama Bidang(Nama metode string)
Ubah nama bidang dari nama metode. Harus sesuai dengan konvensi JavaBeans.

Parameter:
nama metode
Nilai pengembalian:

adalahClassExist

boolean statis publik adalahClassExist(String nama kelas)
Memverifikasi bahwa nama "className" yang sepenuhnya memenuhi syarat adalah nama kelas yang ada.

Parameter:
nama kelas
Nilai pengembalian:

getPropertyDescriptors

PropertyDescriptor statis publik[] getPropertyDescriptors(Objek objek) melempar IntrospectionException
Mengembalikan PropertyDescriptor yang menyimpan informasi objek untuk "objek".

Parameter:
obyek
Nilai pengembalian:
pengecualian:
java.beans.IntrospectionException

Kode sumber BeanUtil

  • URLをコピーしました!
Daftar isi