Android Kotlin 反射工具

2023-06-14  本文已影响0人  想看烟花么
inline fun <reified T> Any.getPrivateField(fieldName: String): T? {
    return this::class.memberProperties.find { fieldName == it.name }?.apply {
        isAccessible = true
    }?.getter?.call(this) as T?
}

fun Any.invokePrivateField(fieldName: String, data: Any) {
    (this::class.memberProperties.find { fieldName == it.name }?.apply {
        isAccessible = true
    } as? KMutableProperty<*>)?.setter?.call(this, data)
}

inline fun <reified T> T.invokePrivateMethod(methodName: String, vararg args: Any?): Any? {
    val method = T::class.functions.firstOrNull{ (it.name == methodName && (it.parameters.size - 1) == args.size)} ?: T::class.superclasses.map { it.functions.firstOrNull{ method-> (method.name == methodName && (method.parameters.size - 1) == args.size)} }.firstOrNull()
    method?.isAccessible = true
    return method?.call(this, *args)
}

-----------------------------End-----------------------------

感谢您的耐心阅读,欢迎支持与点赞。
上一篇 下一篇

猜你喜欢

热点阅读