当通过Reflection创建对象时,未初始化最终布尔字段

时间:2017-01-13 16:08:36

标签: java reflection constructor initialization final

今天发现了一件奇怪的事情。 我有一个受保护的最终布尔字段:

 protected final boolean active = true;

如您所见,我希望在实例化对象后,使用TRUE值初始化此字段。这是一个数据库模型类。我使用mybatis 3.1.1从数据库中读取数据。 我看到的是当我使用mybatis SqlSession.selectOne()调用db时,我收到一个active == false的对象!但我不会在sql查询中更改此字段。 我挖掘了mybatis代码并发现在DefaultObjectFactory.java#create(Class<T>, List<Class<?>>, List<Object>)中我的对象被实例化,并且这个最终有效的&#39;字段等于FALSE。 好吧,我完全糊涂了,无法找到有关它的任何信息。 有人可以解释一下这里发生了什么吗?因为我认为必须在构造函数逻辑结束后初始化final字段。

1 个答案:

答案 0 :(得分:0)

感谢@Holger!

我搞砸了课。最终字段初始化按预期工作。