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

是否可以通过反射来调用私有属性或方法

屠盛
2023-03-14
问题内容

我试图通过反射获取静态私有属性的值,但失败并显示错误。

Class class = home.Student.class;
Field field = studentClass.getDeclaredField("nstance");
Object obj = field.get(null);

我得到的异常是:

java.lang.IllegalAccessException: Class com.test.ReflectionTest can not access a member of class home.Student with modifiers "private static".

而且,我需要使用以下代码来调用一个私有的。

Method method = studentClass.getMethod("addMarks");
method.invoke(studentClass.newInstance(), 1);

但是问题是Student类是单例类,并且构造函数是私有的,并且无法访问。


问题答案:

您可以将字段设置为可访问:

field.setAccessible(true);


 类似资料:
  • 问题内容: Java中是否可以通过反射访问私有字段str?例如获取该字段的值。 问题答案: 是。 然后,使用字段对象获取类实例上的值。 请注意,方法通常会使人们感到困惑。你有该字段,但没有该对象的实例。你必须将其传递给方法

  • 是否有可能找出方法的参数是否是的?我试过这个: 但是,即使第一个参数有< code>final修饰符,< code>modifiers也被设置为零。 编辑:我真的不认为我的问题是重复的。当我使用类成员(例如字段、方法等)尝试此代码时,它可以完美地工作。但是使用方法参数失败! edit2:在你建议我的问题中,我没有找到答案,所以你能帮助我,如何检查参数是否是最终的?

  • 我有一个方法如下: 为了通过反射调用此函数,我尝试了以下代码段,但结果不成功: 那么,有没有一种方法可以通过Java反射调用像findEntity这样的方法? 谢谢

  • 我是个新手,学习面向对象的Java。我有一个关于通过调用方法为多个数组添加元素的问题。我只是试图避免多次创建循环,对于多个数组,我想创建一个方法,它将包含必要的循环来添加元素(甚至将它们显示为输出),这样我就可以在需要的时候调用它。希望你明白我想说的话。请原谅我的英语不好。

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