Reflection hay Introspection là tính năng cho phép chúng ta “điều tra” xem đối tượng/lớp/biến…v.v gồm có những gì. Chẳng hạn như tìm hiểu xem một đối tượng đó gồm có những thuộc tính gì và phương thức gì.
Trong Java thì reflection được hỗ trợ rất đầy đủ trong gói java.lang.reflect,
ngoài ra một số phương thức trong lớp java.lang.Object
và java.lang.Class
cũng hỗ trợ reflection, chúng ta có thể gọi các lớp này ở native để thực hiện reflection cũng được, hoặc chúng ta có thể dùng một số hàm của JNI như:
jclass GetSuperclass(jclass cls)
: nhận vào một lớp, trả về lớp cha của lớp đójboolean IsAssignableFrom(jclass clsA, jclass clsB):
nhận vào 2 lớp a, b trả về true hoặc false, cho biết lớp a có thể ép kiểu sang lớp b hay khôngjclass GetObjectClass(jobject obj):
chúng ta đã làm nhiều với hàm này rồi, hàm này nhận vào một đối tượng và trả về lớp của đối tượng đójboolean IsInstanceOf(jobject obj, jclass cls)
: nhận vào một đối tượng và một lớp, trả về true hoặc false cho biế đối tượng đó có phải sinh ra từ lớp đó hay khôngjmethodID FromReflectedField(jobject method)
:chuyển một đối tượng
java.lang.reflect.Method
hoặcjava.lang.reflect.Constructor
sang một đối tượngjmethodID
jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic)
: chuyển một đối tượngjfieldID
từcls
sang một đối tượngjava.lang.reflect.Field
, nếu trường đó là static thìisStatic
là true, ngược lại là falsejmethodID FromReflectedMethod(jobject method)
: chuyển một đối tượngjava.lang.reflect.Method
hoặcjava.lang.reflect.Constructor
sang một đối tượngjmethodID
jobject ToReflectedMethod(jclass
cls, jmethodID methodID, jboolean isStatic):
chuyển một đối tượngjmethodID
kế thừa từjclass
sang một đối tượngjava.lang.reflect.Method
hoặcjava.lang.reflect.Constructor,
nếu phương thức là static thìisStatic
là true, ngược lại là false