Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java反射访问私有字段抛出NoSuchFieldException,即使字段存在_Java_Reflection - Fatal编程技术网

java反射访问私有字段抛出NoSuchFieldException,即使字段存在

java反射访问私有字段抛出NoSuchFieldException,即使字段存在,java,reflection,Java,Reflection,我有一个私人领域的课程 public class HibernateSessionFactoryManager{ private SessionFactory sessionFactory; } 现在我想使用私有字段对一些方法进行单元测试。因此,我试图使用java反射访问私有字段 try { Field field = HibernateSessionFactoryManager.class.getDeclaredField("sessionFactory");

我有一个私人领域的课程

public class HibernateSessionFactoryManager{
    private SessionFactory sessionFactory;
}
现在我想使用私有字段对一些方法进行单元测试。因此,我试图使用java反射访问私有字段

 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类似问题的人来说:当使用
类设置私有字段时。getDeclaredField()
必须使用
new
直接实例化要设置私有字段的对象,而不是调用Mockito的
mock()

是否“manager”可能是派生类的对象?很抱歉,我使用了manager=spy(新的HibernateSessionFactoryManager());Mockito是我用来模拟的一个框架。编译代码时代码是否被混淆了?模拟框架可能正在创建代理对象而不是真实对象。检查Mockito文档。是的,Mockito注入了问题,一旦我删除了spy并创建了实际对象,问题就解决了。