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

原文 标签 java reflection

我有一堂私人课

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中遇到类似问题的人受益:使用class.getDeclaredField()设置私有字段时,必须使用new直接实例化要设置私有字段的对象,而不是通过调用Mockito的mock()

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

相关文章:

java - 必须使用 "putIfAbsent"的返回值 - 真的吗?

java - MSSQL Server 2005-JDBC连接

java - 继承类的反射(reflection)

c# - 获取属性名称而不通过反射传入?

c# - 具有来自 PropertyInfo.PropertyType 的类型的通用类实例

java - Java JSON解析器可以访问远程服务吗?

java - Spring和@Value注释

java - 如何存储 boolean 测试/表达式而不进行评估?

php在运行时创建类方法

c# - 如何从属性获取构造函数命名参数