本文最后更新于 77 天前,其中的信息可能已经有所发展或是发生改变。
getField不能获取private修饰(可以向父类查找) 当查找不到使用getDeclaredField(不能向父类查找),任然报错需要向父级查找(获取所有Field或Method通过name匹配查找)静态static方法执行无需传入对象实例
private fun getField(cls: Class<*>,str: String): Field? {
var mCls:Class<*>? = cls
try {
return mCls?.getField(str)
} catch (e: NoSuchFieldException) {
while(true){
try {
val field = mCls?.getDeclaredField(str)?.apply {
isAccessible = true
}
return field
} catch (unused: NoSuchFieldException) {
e.printStackTrace()
mCls = mCls?.superclass
if(mCls == null) {
return null
}
}
}
}
}
遍历当前类所以属性、方法后去匹配目标属性和方法
InputQueue::class.java.methods.forEach {
Log.d("dqs",">>>>>>>>>>>>> ${it}")
}
ac::class.java.superclass.fields.forEach {
Log.d("dqs",">>>>>>>>>>>>> field: ${it}")
}