gpt4 book ai didi

java - 变量可能尚未初始化,但已在构造函数中设置

转载 作者:搜寻专家 更新时间:2023-10-31 19:59:46 24 4
gpt4 key购买 nike

所以我尝试寻找答案,但对于这个错误消息,我找到了与我的问题无关的答案。

在这里。为什么这个代码:

案例一)

public class A {
private final String A;
private final String B;
private final String C = A + B;

public A(String A, String B) {
this.A = A;
this.B = B;
}
}

对于 private final String C = A + B; 这行,它指出了这些错误:

java: variable A might not have been initialized
java: variable B might not have been initialized

但这就像一个魅力:

案例2)

public class K {
private final String K;
private final String L;
private final String M = kPlusL();

public K(final String K, final String L) {
this.K = K;
this.L = L;
}

private String kPlusL() {
return K + L;
}
}

或者这也很有魅力:

案例三)

public class O {
protected final String O;
protected final String P;

public O(final String O, final String P) {
this.O = O;
this.P = P;
}
}

public class Q extends O {
private final String Q = O + P;

Q (final String O, final String P) {
super(O, P);
}
}

有人可以解释一下为什么吗?我正在使用 IntelliJ IDEA 和 Java 1.8.0_151。

所有三种情况都在做完全相同的事情(将两个字符串放在一起),但一种是直接进行,第二种和第三种是“间接”进行。

最佳答案

当您在第一种情况下尝试初始化 C 时,AB 此时仍未初始化,因此 private final String C = A + B; 将失败。

尝试在构造函数中初始化 C:

public class A {
private final String A;
private final String B;
private final String C;

public A(String A, String B) {
this.A = A;
this.B = B;
this.C = A + B;
}
}

这是来自 JLS 的相关部分

For every access of a local variable or blank final field x, x must be definitely assigned before the access, or a compile-time error occurs.

关于java - 变量可能尚未初始化,但已在构造函数中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com