在Java中可以通过反射访问私有字段吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

在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);

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

用户回答回答于

使用Field.setAccessible(true)

import java.lang.reflect.*;

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

class Test
{
    public static void main(String[] args)
        // Just for the ease of a throwaway test. Don't
        // do this normally!
        throws Exception
    {
        Other t = new Other();
        t.setStr("hi");
        Field field = Other.class.getDeclaredField("str");
        field.setAccessible(true);
        Object value = field.get(t);
        System.out.println(value);
    }
}

扫码关注云+社区

领取腾讯云代金券