您可以在 Java 中访问私有变量,而无需来自非内部类的类的 getter [重复]
Posted
技术标签:
【中文标题】您可以在 Java 中访问私有变量,而无需来自非内部类的类的 getter [重复]【英文标题】:You can access private variables in Java without getters from a class that's not an inner class [duplicate] 【发布时间】:2015-09-26 08:44:26 【问题描述】:我对 serialVersionUID 的用途有所了解,并且在我不知道的情况下,我可以查找它。但它可以是在类中不使用的私有变量。这背后有什么结构吗?是否还有其他未在同一类中使用的私有变量/方法的示例?我可以访问 Java 中的私有变量,而无需来自非内部类的类的 getter,就像序列化一样?
【问题讨论】:
你可以使用reflection 反对者请澄清。 不,请关闭。这就是我一直在寻找的。span> 【参考方案1】:您可以访问这些值,并通过Reflection 操作它们。 通过这种机制,您可以检查字段并调用方法。
【讨论】:
【参考方案2】:Java 虚拟机正在读取此字段,它可以对您的程序执行任何操作,包括读取私有字段。注意序列化相关的方法比如writeObject
can also be private,不过这对于JVM来说也不是问题。
您还可以通过反射或 java.lang.invoke API 访问私有字段/方法(但是 SecurityManager
可能会阻止您这样做)。在 Oracle JDK/Open JDK 中,还有未记录的 sun.misc.Unsafe
API,它允许您执行许多ughm 不安全的事情,甚至包括从对象中读取原始数据。
【讨论】:
【参考方案3】:使用java.lang.reflect.Member.setAccessible(true)
将在运行时覆盖任何隐私(不是很多——JVM 会很高兴地访问给定名称的私有字段或方法,请参阅this answer。
【讨论】:
以上是关于您可以在 Java 中访问私有变量,而无需来自非内部类的类的 getter [重复]的主要内容,如果未能解决你的问题,请参考以下文章