我有一个Android应用程序,它通过DexClassLoader
loadClass
和invoke()
调用我的方法。
我需要访问从方法本身调用我的方法的类的字段。
我设法通过堆栈跟踪获取了调用方法的名称,但我已经知道这没有用,因此我无法从堆栈跟踪中访问类本身,只能访问其名称。
您是否知道如何从我控制的方法中获取调用类的字段的值?
我认为有一个反射类可以在基本的Java中做到这一点,但在android上找不到类似的东西。
谢谢
我假设您使用的是Kotlin,但对于Java来说并没有什么不同
T::class.java.declaredFields.filter {
//this is just an example, you can have a different filter
//or not filter at all
it.isAnnotationPresent(MyAnnotation::class.java)
}.forEach {
//do something with it
}
由于类型擦除,只能用一种标准化的方法来完成
所以总的来说看起来像这样:
inline fun <reified T> doSomething(parameter: T){
val hashMap = HashMap<String,Any>()
T::class.java.declaredFields.filter {
it.isAnnotationPresent(MyAnnotation::class.java)
}.forEach {
//for example
hashMap[it.name] = it.genericType
}
}