Cách lấy ra method của class abstract interface thông qua Reflection?
A -> Abstract class extends B implement C
B là class bình thường
C là Abstract Interface
- C có hàm insertObject(object o)
Mình có table Product
-> Có Class Product_GenericDao extends A.
Nếu đem class này đi sử dụng ta có thể sử dụng:
Product_GenericDao genDao = new Product_GenericDao();
genDao.insertObject(object); -> Ok cái này thì không có vấn đề gì.
Vấn đề khi sử dụng Reflection sử dụng class này.
Class<Product_GenericDao> aClass = Product_GenericDao.class
Method method = Class.getMethod(“insertObject”, object);
=> Thì bị báo là NoSuchMethod…
-> Mình đã tìm ra nguyên ngân do hàm insertObject là của thằng cha, mà việc getMethod này chỉ lấy được
những method tại class này thôi. Vậy có cách nào để e getMethod của thằng C từ thằng aClass
này không mọi người?
Cái này có thể do compiler remove mất (do nó tìm trong code không có ai gọi hàm này)…
Bạn thử thêm dòng gọi vu vơ nào đó (để compiler đánh dấu là có dùng) xem có fix được không
Nếu trong hàm đó mình viết 1 hàm overidde lại và gọi supper.insertObject trong đó thì lúc này method kia lại có giá trị và ko bị chết nữa. Do hiểu là Class hiện tại nó chưa nhìn thấy được hàm insertObject kia. Mình thử Class.getSupperClass thì nó chỉ tới class A thôi. Chưa tới IF C mà mình cần.
Để biết chính xác tại sao thì bạn phải unzip file jar, decode class A, và decode IF C, xem trong IF C này có còn method đó không.
Mình đoán là compiler đã tự optimized cái IF C (tự remove method đó rồi, do không ai gọi nó trước khi compile thành file .class)
biến này có tác dùng gì ??
API doc