最终布尔值正在改变值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最终布尔值正在改变值相关的知识,希望对你有一定的参考价值。
我有一个final变量的类变量,并在构造函数中设置。当我在抽象类和子类的构造函数中检查它的值时,它是正确的值。但是当我稍后在方法中检查它时,它总是错误的。这是我的代码。
abstract class AbstractArticleObject extends StructureObject {
final boolean firstArticle;
AbstractArticleObject(Element element, boolean firstArticle) {
super(element);
this.firstArticle = firstArticle;
...
}
}
class ArticleObject extends AbstractArticleObject {
ArticleObject(Element element, boolean firstArticle) {
super(element, firstArticle);
// In this method, firstArticle is whatever was passed in, which is sometimes true.
Log.v(title, String.format(String.valueOf(this.firstArticle));
}
@Override
StructureState getState() {
// In this method, firstArticle is always false.
Log.v(title, String.format(String.valueOf(firstArticle));
if (...) {
...
} else if (...) {
if (firstArticle) {
return StructureState.CAN_OPEN;
} else {
...
}
}
return StructureState.NOT_SET;
}
}
如果我在构造函数中设置值,并且值为final,为什么即使将其设置为true也会返回false?
答案
getState()
从哪里打来的?
如果您在初始化之前访问它们,final
变量可能会“更改”。考虑以下微小程序:
public class Test {
private final boolean value;
public Test() {
doSomething();
this.value = true;
doSomething();
}
private void doSomething() {
System.out.println(value);
}
public static void main(String[] args) {
new Test();
}
}
该程序的输出将是
false
true
所以,如果你的getState()
方法是从例如StructureObject
的构造函数,然后它将在AbstractArticleObject
构造函数初始化firstArticle
之前被调用,它将是false
。
以上是关于最终布尔值正在改变值的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - cubit - 改变cubit内的布尔值