本文介绍了Java/Android/Kotlin:对私有字段的反思,并在其上调用公共方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以使用反射来访问对象的私有字段并在该字段上调用公共方法?

Is it possiable to use reflection to access a object's private field and call a public methods on this field?

class Hello {
   private World word
}

class World {
   public BlaBlaBla foo()
}

Hello h = new Hello()

World world = reflect on the h


// And then 

world.foo()

推荐答案

可以使用反射使private字段accessible成为可能.以下示例(都是用 Kotlin 编写)展示了它……

It’s possible to make private fields accessible using reflection. The following examples (both written in Kotlin) show it...

使用 Java 反射:

val hello = Hello()
val f = hello::class.java.getDeclaredField("world")
f.isAccessible = true
val w = f.get(hello) as World
println(w.foo())

使用科特林反射:

val hello = Hello()
val f = Hello::class.memberProperties.find { it.name == "world" }
f?.let {
    it.isAccessible = true
    val w = it.get(hello) as World
    println(w.foo())
}

这篇关于Java/Android/Kotlin:对私有字段的反思,并在其上调用公共方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 20:55