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-----------------------------
网友评论