Mekanisme Refleksi Java
Mekanisme Refleksi Java dalam keadaan berjalan Metode ini disebut mekanisme refleksi bahasa Java.
Mekanisme Refleksi Java terutama menyediakan fungsi -fungsi berikut: Tentukan kelas yang dimiliki oleh objek mana pun saat runtime; objek;
1. Dapatkan sifat objek
Salinan kode adalah sebagai berikut:
Objek publik getProperty (pemilik objek, string fieldName) melempar Exception {
Class ownerclass = owner.getClass ();
Bidang bidang = OwnerClass.getfield (FieldName);
Properti objek = field.get (pemilik);
mengembalikan properti;
}
Class ownerClass = owner.getClass (): Dapatkan kelas objek ini.
Field Field = OwnerClass.getfield (FieldName): Dapatkan atribut yang dinyatakan oleh kelas melalui kelas.
Properti Object = Field.get (Pemilik): Dapatkan instance dari properti ini melalui objek.
2. Dapatkan sifat statis dari kelas tertentu
Salinan kode adalah sebagai berikut:
Objek Publik GetStaticProperty (String ClassName, String FieldName)
melempar pengecualian {
Class ownerclass = class.forname (className);
Bidang bidang = OwnerClass.getfield (FieldName);
Properti objek = field.get (OwnerClass);
mengembalikan properti;
}
Class ownerclass = class.forname (className): Pertama dapatkan kelas kelas ini.
Field Field = OwnerClass.getfield (FieldName): Seperti di atas, dapatkan atribut yang dinyatakan berdasarkan kelas melalui kelas.
Properti Objek = Field.get (OwnerClass): Ini sedikit berbeda dari yang di atas, karena properti statis, sehingga diambil langsung dari kelas kelas.
3. Metode untuk menjalankan objek
Salinan kode adalah sebagai berikut:
Objek publik InvokeMethod (pemilik objek, string methodName, objek [] args) melempar Exception {
Class ownerclass = owner.getClass ();
Class [] argsclass = kelas baru [args.length];
untuk (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
}
Metode metode = ownerclass.getMethod (methodName, argsclass);
return method.invoke (pemilik, args);
}
Class owner_class = owner.getClass (): Pertama -tama, Anda harus mendapatkan kelas objek ini.
Baris 5 hingga 9: Mengkonfigurasi array kelas parameter sebagai kondisi untuk menemukan metode.
Metode Metode = OwnerClass.GetMethod (MethodName, ArgsClass): Dapatkan metode yang akan dieksekusi oleh MethodName dan array ArgsClass (Tipe Parameter dalam Metode).
METODE.Invoke (pemilik, args): Parameter yang menjalankan metode. . Nilai pengembalian adalah objek, yang juga merupakan nilai pengembalian metode.
4. Jalankan metode statis dari kelas tertentu
Salinan kode adalah sebagai berikut:
Objek publik InvokestaticMethod (String ClassName, String MethodName,
Objek [] args) melempar pengecualian {
Class ownerclass = class.forname (className);
Class [] argsclass = kelas baru [args.length];
untuk (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
}
Metode metode = ownerclass.getMethod (methodName, argsclass);
return method.invoke (null, args);
}
Prinsip dasarnya sama dengan contoh 3, perbedaannya adalah baris terakhir.
5. Buat contoh baru
Salinan kode adalah sebagai berikut:
Objek publik newInstance (string className, objek [] args) melempar pengecualian {
Class newoneClass = class.forname (className);
Class [] argsclass = kelas baru [args.length];
untuk (int i = 0, j = args.length; i <j; i ++) {
argsclass [i] = args [i] .getClass ();
}
Konstruktor cons = newoneClass.getConstructor (argsclass);
return cons.newinstance (args);
}
Metode yang disebutkan di sini adalah untuk menjalankan konstruktor dengan parameter untuk membuat instance baru. Jika tidak ada parameter yang diperlukan, Anda dapat secara langsung menggunakan newoneClass.newInstance () untuk mengimplementasikannya.
Class newoneClass = class.forname (className): Langkah pertama adalah mendapatkan kelas dari instance yang akan dibangun.
Baris 5 hingga 9: Dapatkan array parameter kelas.
Constructor cons = newoneClass.getConstructor (argsclass): dapatkan konstruktor.
Cons.NewInstance (ARGS): Buat contoh baru.
6. Tentukan apakah itu contoh dari kelas tertentu
Salinan kode adalah sebagai berikut:
ISINSTANCE BOOLEAN PUBLIK (Objek OBJ, Kelas CLS) {
return cls.isinstance (OBJ);
}
7. Dapatkan elemen di array
Salinan kode adalah sebagai berikut:
objek publik getByArray (array objek, indeks int) {
return array.get (array, index);
}