最终布尔值正在改变值

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内的布尔值

如何解决“termsOfUse 必须是布尔类型,但最终值为:“on”。使用 Ionic、React、Yup 和解析器

GSON将布尔值序列化为0或1

为什么布尔表达式的值不会改变? (JAVA)

使用枚举与布尔值?

java布尔值在被调用方法中没有改变[重复]