通过反射创建对象时未初始化最终布尔字段
Final boolean field not initialized when object is created via Reflection
今天发现一件奇怪的事情。
我有一个受保护的最终布尔字段:
protected final boolean active = true;
如您所见,我希望在实例化对象后将此字段初始化为 TRUE 值。这是一个数据库模型 class。我使用mybatis 3.1.1 从数据库中读取数据。
我看到的是当我使用 mybatis SqlSession.selectOne() 调用 db 时,我收到一个 active == false 的对象!但我没有在 sql 查询中更改此字段。
我仔细研究了 mybatis 代码,发现在 DefaultObjectFactory.java#create(Class<T>, List<Class<?>>, List<Object>)
中我的对象被实例化并且最终的 'active' 字段等于 FALSE。
好吧,我很困惑,找不到任何相关信息。
有人可以解释一下这里发生了什么吗?因为我认为 final 字段必须在构造函数逻辑结束后初始化。
感谢@Holger!
我搞砸了 类。最终字段初始化按预期工作。
今天发现一件奇怪的事情。 我有一个受保护的最终布尔字段:
protected final boolean active = true;
如您所见,我希望在实例化对象后将此字段初始化为 TRUE 值。这是一个数据库模型 class。我使用mybatis 3.1.1 从数据库中读取数据。
我看到的是当我使用 mybatis SqlSession.selectOne() 调用 db 时,我收到一个 active == false 的对象!但我没有在 sql 查询中更改此字段。
我仔细研究了 mybatis 代码,发现在 DefaultObjectFactory.java#create(Class<T>, List<Class<?>>, List<Object>)
中我的对象被实例化并且最终的 'active' 字段等于 FALSE。
好吧,我很困惑,找不到任何相关信息。
有人可以解释一下这里发生了什么吗?因为我认为 final 字段必须在构造函数逻辑结束后初始化。
感谢@Holger!
我搞砸了 类。最终字段初始化按预期工作。