Android Get Calling类字段

问题描述 投票:0回答:1

我有一个Android应用程序,它通过DexClassLoader loadClassinvoke()调用我的方法。

我需要访问从方法本身调用我的方法的类的字段。

我设法通过堆栈跟踪获取了调用方法的名称,但我已经知道这没有用,因此我无法从堆栈跟踪中访问类本身,只能访问其名称。

您是否知道如何从我控制的方法中获取调用类的字段的值?

我认为有一个反射类可以在基本的Java中做到这一点,但在android上找不到类似的东西。

谢谢

android reflection
1个回答
0
投票

我假设您使用的是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
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.