android - 最终布尔值正在改变
问题描述
我有一个最终的类变量,并在构造函数中设置。当我在抽象类和子类的构造函数中检查它的值时,它是正确的值。但是当我稍后在一个方法中检查它时,它总是错误的。这是我的代码。
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
如果您在初始化之前访问它们,变量可能会“改变”。考虑以下小程序:
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
。
推荐阅读
- regex - Powershell 有条件地替换制表符分隔文件中的字符序列
- typescript - 打字稿:从具有泛型的对象中获取键映射
- ios - 如何以编程方式在 iOS 中使用 PHPicker 加载原始图像?
- apache - 如何从 HTML 网页中删除文件扩展名通常不起作用
- python - 以最快的方式从数据框 Python 中的索引创建一个新的字典列表
- c# - selenium 是否可以访问特定操作后生成的值?
- c++ - c ++从秒变为天,小时.分钟和秒
- java - 添加 spring-security-oauth2-client 依赖项时出现“无法执行目标...,无法执行 java”错误
- python - 如何将格式应用于列中的特定值
- javascript - 我只使用调度,React 抛出 Can't perform a React state update on an unmounted component