java反射访问私有(private)字段抛出NoSuchFieldException即使该字段存在

标签 java reflection

我有一个带有私有(private)字段的类

public class HibernateSessionFactoryManager{
    private SessionFactory sessionFactory;
}

现在我想使用私有(private)字段对某些方法进行单元测试。所以我尝试使用 java reflection 访问私有(private)字段。

 try {
        Field field = HibernateSessionFactoryManager.class.getDeclaredField("sessionFactory");
        field.setAccessible(true);
        //field.set
        SessionFactory sessionFactory = (SessionFactory) field.get(manager);
    } catch (NoSuchFieldException e) {
        System.out.println("no such");
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

我正在获取

java.lang.NoSuchFieldException: sessionFactory at java.lang.Class.getField(Class.java:1584)

我无法弄清楚我犯了什么错误。任何帮助将不胜感激。

最佳答案

为了那些在Mockito中遇到类似问题的人的利益:当使用class.getDeclaredField()设置私有(private)字段时,要设置私有(private)字段的对象必须直接实例化使用 new,而不是调用 Mockito 的 mock()

关于java反射访问私有(private)字段抛出NoSuchFieldException即使该字段存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31917158/

相关文章:

java - ArrayAdapter 中带有按钮的自定义 View

java - 使用反射方法设置EditText光标颜色

java - 在 java 反射中发送到 getDeclaredMethod(String, Class[]) 的参数类型

java - URL 查询给出的结果与 postman 不同

java - 在 Android 中定期从服务器获取数据(轮询)

java - 如何在 Maven 中使用不同配置运行 UI 测试

java - Java 项目中的版本控制?

C#:如何在强制不同编码的同时调用方法?

java - 使用 Reflections 创建新的类实例

Java反射丢失注解信息