Prinsip: Refleksi Java dapat memperoleh nama atribut, dan kemudian memanggil metode kelas melalui pemanggilan.
Misalnya, ada properti bernama userName, kelas ini menulis metode bernama getUserName, dan metode getUserName dipanggil melalui pemanggilan.
Kodenya adalah sebagai berikut
Copy kode kodenya sebagai berikut:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
impor java.util.HashMap;
import java.util.Map;
ParameterBase kelas publik
{
/**
* Dapatkan bidang Kelas dan Peta nilai
* @kembali
*/
Peta publik<String, String> getClassInfo()
{
Peta<String,String> fieldAndValues = HashMap baru<String, String>();
Bidang [] bidang = this.getClass().getDeclaredFields();
for(int i=0; i< bidang.panjang; i++)
{
Bidang f = bidang[i];
Nilai string = getFieldValue(ini,f.getName()).toString();
fieldAndValues.put(f.getName(),value);
}
kembalikan bidangDanNilai;
}
String pribadi getFieldValue (Pemilik objek, Nama bidang String)
{
return invokeMethod(pemilik, fieldName,null).toString();
}
/**
*
* Jalankan metode getField pada Bidang tertentu
*
* @param pemilik kelas
* @param fieldName nama atribut kelas
* Parameter argumen @param, defaultnya adalah nol
* @kembali
*/
Metode pemanggilan Objek pribadi (Pemilik objek, Nama bidang String, Objek[] args)
{
Kelas<?meluas Objek> ownerClass = owner.getClass();
//Nama Bidang -> Nama Bidang
String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
Metode metode = null;
mencoba
{
metode = ownerClass.getMethod("dapatkan" + namametode);
}
tangkapan (SecurityException e)
{
//e.printStackTrace();
}
menangkap (NoSuchMethodException e)
{
// e.printStackTrace();
kembali "";
}
//panggil getMethod
mencoba
{
metode pengembalian.invoke(pemilik);
}
tangkapan (Pengecualian e)
{
kembali "";
}
}
}
Tulis Pengguna kelas yang mewarisi dari ParameterBase dan tulis kode pengujian
Copy kode kodenya sebagai berikut:
Pengguna kelas publik memperluas ParameterBase
{
String namapengguna;
String passDunia;
String publik getUserName()
{
kembalikan nama pengguna;
}
kekosongan publik setUserName(String nama pengguna)
{
this.namapengguna = Namapengguna;
}
String publik getPassWorld()
{
tiket pulangDunia;
}
kekosongan publik setPassWorld(String passWorld)
{
this.passWorld = passWorld;
}
public static void main(String[] args)
{
Pengguna u = Pengguna baru();
u.passWorld = "123";
u.namapengguna = "aaaaa";
Sistem.keluar.println(u.getClassInfo().toString());
}
}
keluaran program
Copy kode kodenya sebagai berikut:
{passWorld=123, nama pengguna=aaaaa}