最终布尔值正在改变
Final boolean is changing value
我有一个 class 变量,它是最终的并在构造函数中设置。当我在抽象 class 和 subclass 的构造函数中检查它的值时,它是正确的值。但是当我稍后在一种方法中检查它时,它总是错误的。这是我的代码。
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;
}
}
如果我在构造函数中设置值,并且该值是最终值,为什么即使它被设置为 true 也会返回 false?
从哪里调用getState()
?
如果您在变量初始化之前访问它们,final
变量可能会变为 "change"。考虑以下小程序:
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
.
我有一个 class 变量,它是最终的并在构造函数中设置。当我在抽象 class 和 subclass 的构造函数中检查它的值时,它是正确的值。但是当我稍后在一种方法中检查它时,它总是错误的。这是我的代码。
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;
}
}
如果我在构造函数中设置值,并且该值是最终值,为什么即使它被设置为 true 也会返回 false?
从哪里调用getState()
?
如果您在变量初始化之前访问它们,final
变量可能会变为 "change"。考虑以下小程序:
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
.