考虑这个例子:
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) {
C c = new C();
try {
Field f = C.class.getDeclaredField("a");
f.setAccessible(true);
Integer i = (Integer)f.get(c);
System.out.println(i);
} catch (Exception e) {}
}
}
class C {
private Integer a =6;
}
允许您通过反射来访问类的私有字段似乎是不合逻辑的。为什么有这样的功能?允许这样的访问不是“危险”吗?
专用旨在防止意外滥用,而不是作为一种安全机制。如果您选择绕过它,那么您可以自行承担风险,并假设您知道自己在做什么。
问题内容: 我找到了一种通过来获取继承成员并通过来获得 ; 私有成员的方法,但是我正在寻找私有的继承字段。我怎样才能做到这一点? 问题答案: 这应该演示如何解决它: (或Class.getDeclaredFields用于所有字段的数组。) 输出:
问题内容: Java中是否可以通过反射访问私有字段str?例如获取该字段的值。 问题答案: 是。 然后,使用字段对象获取类实例上的值。 请注意,方法通常会使人们感到困惑。你有该字段,但没有该对象的实例。你必须将其传递给方法
问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要
问题内容: 最近,我观察到在Java中访问priavte字段的意外行为。考虑以下示例,该示例说明了该行为: 为什么我可以访问类的其他对象的私有字段的内法(第二种情况)? 问题答案: 私有字段保护一个类,而不是实例。主要目的是允许一个类独立于其API实现。在它们之间隔离实例,或从相同类的静态代码中保护实例的代码都不会带来任何好处。
要 动态获取一个对象方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getMethods() getMethods(String name,Class<?> …parameterTypes) getDeclaredMethods() getDeclaredMethods(String name,Class<?>...parameterTypes) 如果是访问指定的构造方法,需要
问题内容: 在一个API中,我使用的是一个具有 私有字段 ( A.privateField* )的 抽象类 ( Class A )。 B 类 在API中 扩展了A类 。我需要用我的 类C的 实现来扩展类B ,但是我需要类A的privateField。我应该使用反射:如何访问超超类的私有字段? __ __* 问题答案: 您需要执行此操作的事实表明设计存在缺陷。 但是,可以按照以下步骤进行操作: 致电