MENU

Refleksi di Java itu mudah.

Daftar isi

Refleksi di Java itu mudah.

JawacerminanBagian ini memperkenalkan kelas-kelas utilitas yang memudahkan penggunaan API.

Apa itu refleksi?

API Refleksigigi,"java.lang.reflectItu sudah termasuk dalam paket,
API ini mengambil informasi seperti field dan method dari kelas Java.
Kita akan menggunakan kelas-kelas berikut ini sebagai acuan utama.

  • java.lang.Class
  • java.lang.reflect.Konstruktor
  • java.lang.reflect.Metode
  • java.lang.reflect.field

cerminanDengan menggunakan metode ini, Anda dapat menghindari pembuatan kelas dan pemanggilan metode secara langsung melalui pengkodean.
Anda dapat membuat instance kelas dan menjalankan metode dari string.

Dengan mendefinisikan nama kelas dan nama metode dalam file eksternal seperti XML, aplikasi dapat diadaptasi secara dinamis terhadap perubahan lingkungan runtime.
Selain itu, ini adalah API yang sangat efektif untuk membangun aplikasi yang sangat fleksibel.


Tujuan refleksi

cerminanMeskipun pengguna tidak sering menggunakannya secara langsung,
Ini banyak digunakan dalam aplikasi web seperti Struts dan dalam kerangka kerja seperti pemetaan O/R.

Sebagai contoh, ketika Anda ingin secara otomatis mengatur data input dari layar web ke dalam properti JavaBeans,
Ini digunakan, misalnya, saat mengeluarkan kueri SQL untuk memperbarui properti JavaBeans secara otomatis.

Selain itu, fitur-fitur seperti pemuatan dan pendaftaran plugin secara dinamis yang memperluas fungsionalitas aplikasi saat aplikasi dimulai juga tersedia.cerminanHal ini dapat dicapai dengan mudah menggunakan [metode ini].

Menjalankan contoh tersebut

Sekarang, silakan jalankan kode contoh dan rasakan sendiri pemrograman berbasis kerangka kerja.

Di sini kita akan menggunakan kelas-kelas berikut.cerminanIni menunjukkan cara sederhana untuk menggunakan utilitas tersebut.

Main.java...Kelas yang akan dieksekusi
BeanUtil.java...Kelas utilitas refleksi
FreeSoft.java...Ini adalah kelas yang mewakili perangkat lunak bebas dan digunakan sebagai refleksi.

●Saat dieksekusi seperti biasa

System.out.println(“">>>Kasus normal"”);
FreeSoft freeSoft = new FreeSoft();
freeSoft.setName(Obrolan & Messenger - Obrolan dan Messenger juga!!)“);
freeSoft.showName();
freeSoft.showPrice(0);

●Saat dieksekusi menggunakan refleksi

Sistem.out.println(>>>Saat menggunakan refleksi)“);
// Buat instance dari kelas FreeSoft
Objek invokeObject = BeanUtil.newInstance("FreeSoft")“);
// Tetapkan nilai untuk kolom nama.
BeanUtil.setProperty(invokeObject, “"nama"” , “"Obrolan & Messenger - Obrolan dan Messenger juga!!"”);
// Menjalankan metode showName() dari FreeSoft.
BeanUtil.invoke(invokeObject, “tampilkanNama”, null);
// Menjalankan metode showPrice() dari FreeSoft.
// Jika metode tersebut memiliki argumen, argumen tersebut harus diteruskan sebagai array bertipe Object.
BeanUtil.invoke(invokeObject, “Tampilkan Harga”,new Object[]{new Integer(0)});

●Hasil eksekusi

Hasil eksekusinya akan sama, baik Anda menggunakan refleksi maupun tidak.

>>>Kasus normal

Nama perangkat lunak: Chat&Messenger Obrolan dan pesan instan!

Harga: 0 yen

>>>Saat menggunakan refleksi

Nama perangkat lunak: Chat&Messenger Obrolan dan pesan instan!

Harga: 0 yen

Detail Metode BeanUtil

Instans baru

Objek statis publik Instans baru(String className) melempar Pengecualian
Ini membuat dan mengembalikan sebuah instance dari string "className".

Parameter:
nama kelas - Nama kelas yang sepenuhnya memenuhi syarat
Nilai kembalian:
Instansi baru dari nama kelas yang sepenuhnya memenuhi syarat.
pengecualian:
Pengecualian

Instans baru

Objek statis publik Instans baru(String className, Object[] argObj) throws Exception
Ini membuat dan mengembalikan sebuah instance dari string "className".

Parameter:
nama kelas - Nama kelas yang sepenuhnya memenuhi syarat
argObj – Argumen konstruktor
Nilai kembalian:
Instansi baru dari nama kelas yang sepenuhnya memenuhi syarat.
pengecualian:
Pengecualian

Instans baru

Objek statis publik Instans baru(Kelas clazz) melempar Pengecualian
Ini membuat dan mengembalikan sebuah instance dari kelas "clazz".

Parameter:
Clazz - kelas
Nilai kembalian:
Contoh baru dari clazz
pengecualian:
Pengecualian

Instans baru

Objek statis publik Instans baru(Kelas clazz, Objek[] argObj) melempar Pengecualian
Ini membuat dan mengembalikan sebuah instance dari kelas "clazz".

Parameter:
Clazz - kelas
argObj – Argumen konstruktor
Nilai kembalian:
Contoh baru dari clazz
pengecualian:
Pengecualian

setProperty

publik statis kosong setProperty(Objek invokeObject, String fieldName, Objek value) melempar Pengecualian
Metode setter dari field "fieldName" pada objek "invokeObject" dipanggil untuk menyimpan nilai "value".

Jika tidak ada metode setter, nilai akan langsung ditetapkan ke field tersebut. Namun, dalam hal ini, pengubah akses properti target harus publik.

Parameter:
MemanggilObjek - Objek yang akan dieksekusi
Nama Bidang – Nama properti dari objek yang akan dieksekusi
Direkomendasikan – Nilai yang akan ditetapkan
pengecualian:
Pengecualian – Pengecualian berikut terjadi:
InvocationTargetException - Ketika metode yang mendasarinya melempar pengecualian
Pengecualian Akses Ilegal – Objek Metode ini adalah Java
Jika kontrol akses bahasa diimplementasikan dan metode yang mendasarinya tidak dapat diakses
Tidak AdaMetodeTersebut - Jika metode dengan nama yang ditentukan tidak ditemukan

mendapatkan properti

Objek statis publik mendapatkan properti(Objek invokeObject, String fieldName) melempar Pengecualian
Metode getter dari fieldName objek invokeObject dipanggil untuk mengambil nilainya.
Jika tidak ada metode getter, nilai akan diambil langsung dari field tersebut. Namun, dalam hal ini, pengubah akses properti target harus publik.

Parameter:
MemanggilObjek - Objek yang akan dieksekusi
Nama Bidang – Nama properti dari objek yang akan dieksekusi
Nilai kembalian:
Nilai kembalian metode getter
pengecualian:
Pengecualian – Pengecualian berikut terjadi:
InvocationTargetException - Ketika metode yang mendasarinya melempar pengecualian
Pengecualian Akses Ilegal – Objek Metode ini adalah Java
Jika kontrol akses bahasa diimplementasikan dan metode yang mendasarinya tidak dapat diakses
Tidak Ada Pengecualian Bidang Itu - Jika kolom dengan nama yang ditentukan tidak ditemukan

memohon

Objek statis publik memohon(Objek invokeObject, String callMethod, Object[] argObjects) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException
Ini menjalankan metode "callMethod" dari objek "invokeObject".
Jika ada nilai kembalian, nilai tersebut dapat diperoleh sebagai sebuah Objek.

Parameter:
MemanggilObjek - Objek yang akan dieksekusi
panggilMetode – Nama metode yang akan dieksekusi
argObjects – Jika ada argumen, argumen tersebut diteruskan sebagai array objek. Jika tidak ada argumen, nilai null diteruskan.
Nilai kembalian:
Nilai kembalian dari eksekusi "callMethod"
pengecualian:
InvocationTargetException - Ketika metode yang mendasarinya melempar pengecualian
Pengecualian Akses Ilegal – Objek Metode ini adalah Java
Jika kontrol akses bahasa diimplementasikan dan metode yang mendasarinya tidak dapat diakses
Tidak AdaMetodeTersebut - Jika metode dengan nama yang ditentukan tidak ditemukan

temukanMetode

Metode statis publik temukanMetode(Objek invokeObject, String callMethod, Object[] argObjects) throws NoSuchMethodException
Ini mencari metode "callMethod" dari objek "invokeObject".

Parameter:
MemanggilObjek - Objek yang akan dieksekusi
panggilMetode – Nama metode dari objek yang akan dieksekusi
argObjects – Jika ada argumen, argumen tersebut diteruskan sebagai array objek. Jika tidak ada argumen, nilai null diteruskan.
Nilai kembalian:
Objek metode yang sesuai dengan kondisi argumen yang ditentukan.
pengecualian:
Tidak AdaMetodeTersebut - Jika tidak ditemukan metode yang cocok, atau jika namanya adalah "" atau ""

setField

publik statis kosong setField(Objek invokeObject, String fieldName, Objek value) throws IllegalAccessException, NoSuchFieldException
Nilai "value" disimpan dalam field bernama "fieldName" dari objek "invokeObject" yang akan dieksekusi.

Parameter:
MemanggilObjek - Objek yang akan dieksekusi
Nama Bidang – Nama field dari objek yang akan dieksekusi
Direkomendasikan – Nilai yang akan ditetapkan
pengecualian:
Pengecualian Akses Ilegal – Objek yang ditentukan adalah field dasar (atau subkelas atau implementasinya).
Jika bukan merupakan instance dari kelas atau antarmuka yang mendeklarasikannya, atau jika konversi pelepasan pembungkus gagal.
Tidak Ada Pengecualian Bidang Itu - Jika kolom dengan nama yang ditentukan tidak ditemukan

dapatkanField

Objek statis publik dapatkanField(Objek invokeObject, String fieldName) throws IllegalAccessException, NoSuchFieldException
Ini mengambil nilai dari nama field "fieldName" dari objek "invokeObject" yang sedang dieksekusi.

Parameter:
MemanggilObjek - Objek yang akan dieksekusi
Nama Bidang – Nama field dari objek yang akan dieksekusi
Nilai kembalian:
Nilai kembalian
pengecualian:
Pengecualian Akses Ilegal – Objek yang ditentukan adalah field dasar (atau subkelas atau implementasinya).
Jika bukan merupakan instance dari kelas atau antarmuka yang mendeklarasikannya, atau jika konversi pelepasan pembungkus gagal.
Tidak Ada Pengecualian Bidang Itu - Jika kolom dengan nama yang ditentukan tidak ditemukan

hasField

publik statis boolean hasField(Objek object, String fieldName) melempar Pengecualian
Ini memeriksa apakah objek "object" telah mendeklarasikan sebuah field bernama "fieldName".

Parameter:
obyek - Objek yang akan diperiksa
Nama Bidang – Nama bidang yang akan diperiksa
Nilai kembalian:
Jika dinyatakan benar
pengecualian:
Pengecualian

Dapatkan Semua Bidang

publik statis java.util.TreeSet Dapatkan Semua Bidang(Objek objek) melempar Pengecualian
Parameter:
obyek
Nilai kembalian:
pengecualian:
Pengecualian

mendapatkan nama kelas pendek

publik statis String mendapatkan nama kelas pendek(Objek objek)
Fungsi ini mengambil nama kelas yang tidak memenuhi syarat dari sebuah objek.

Parameter:
obyek
Nilai kembalian:

mendapatkan nama kelas pendek

publik statis String mendapatkan nama kelas pendek(String className)
Ini mengambil nama kelas dari nama yang sepenuhnya memenuhi syarat.

Parameter:
nama kelas
Nilai kembalian:

GETFieldName

publik statis String GETFieldName(String methodName)
Ubah nama field dari nama method. Ini harus sesuai dengan konvensi JavaBeans.

Parameter:
nama data
Nilai kembalian:

isClassExist

publik statis boolean isClassExist(String className)
Ini memeriksa apakah nama yang sepenuhnya memenuhi syarat "className" adalah nama kelas yang ada.

Parameter:
nama kelas
Nilai kembalian:

mendapatkanDeskriptorProperti

public static PropertyDescriptor[] mendapatkanDeskriptorProperti(Objek object) melempar IntrospectionException
Ini mengembalikan PropertyDescriptor yang menyimpan informasi objek dari "object".

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

Kode sumber BeanUtil

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