当前位置: 首页 > 面试题库 >

Java中是否可以通过反射访问私有字段

常乐
2023-03-14
问题内容

Java中是否可以通过反射访问私有字段str?例如获取该字段的值。

class Test
{
   private String str;
   public void setStr(String value)
   {
      str = value;
   }
}

问题答案:

是。

  Field f = Test.class.getDeclaredField("str");
  f.setAccessible(true);//Very important, this allows the setting to work.
  String value = (String) f.get(object);

然后,使用字段对象获取类实例上的值。

请注意,get方法通常会使人们感到困惑。你有该字段,但没有该对象的实例。你必须将其传递给get方法



 类似资料:
  • 问题内容: 我找到了一种通过来获取继承成员并通过来获得 ; 私有成员的方法,但是我正在寻找私有的继承字段。我怎样才能做到这一点? 问题答案: 这应该演示如何解决它: (或Class.getDeclaredFields用于所有字段的数组。) 输出:

  • 问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要

  • 问题内容: 考虑这个例子: 允许您通过反射来访问类的私有字段似乎是不合逻辑的。为什么有这样的功能?允许这样的访问不是“危险”吗? 问题答案: 专用旨在防止意外滥用,而不是作为一种安全机制。如果您选择绕过它,那么您可以自行承担风险,并假设您知道自己在做什么。

  • 问题内容: 我试图通过反射获取静态私有属性的值,但失败并显示错误。 我得到的异常是: 而且,我需要使用以下代码来调用一个私有的。 但是问题是Student类是单例类,并且构造函数是私有的,并且无法访问。 问题答案: 您可以将字段设置为可访问:

  • 我有以下代码来检索http和https的默认,它通过访问静态包作用域方法,在Java8中工作: 这在jigsaw的Java9中仍然是可能的,还是禁止以这种方式修改可见性?

  • 问题内容: 在一个API中,我使用的是一个具有 私有字段 ( A.privateField* )的 抽象类 ( Class A )。 B 类 在API中 扩展了A类 。我需要用我的 类C的 实现来扩展类B ,但是我需要类A的privateField。我应该使用反射:如何访问超超类的私有字段? __ __* 问题答案: 您需要执行此操作的事实表明设计存在缺陷。 但是,可以按照以下步骤进行操作: 致电