Java使用非final变量设置final变量

标签 java variables final

这可能是个愚蠢的问题,但我还是会冒险问这个问题。

我经常需要创建一个 final 变量以在其他地方使用,并且需要根据某些条件设置该变量的值。这是我通常的做法:

String notFinalVersion = null;
if (someThing == 1) {
    notFinalVersion = "The value was 1.";
} else {
    notFinalVersion = "The value is not 1.";
}
final String finalVersion = notFinalVersion;

然后我可以在需要的地方使用变量 finalVersion。但是,这似乎有点不对劲。有更好的方法吗?

编辑:我所说的“更好”是指我正在寻找一种方法来定义最终变量,而不需要我创建额外的变量。我知道创建一个额外的变量效率低下而且不是一个好的做法,而且我确信必须有一种方法可以在没有额外步骤的情况下完成需要完成的工作。

我收到了一个答案,我已将其标记为已接受。正如我在评论中所述,我最初尝试了提供的解决方案,但收到了来自 Eclipse 的错误。我一定是第一次输入错误,或者 Eclipse 出现了一些“问题”。

我承认做某事有很多种方法,一个人会接受的最佳方法并不是其他人会考虑的方法。但是,此处包含的所有答案都清晰明了,我觉得解决了我的问题。

最佳答案

您可以声明一个 final 变量但不赋值,只要在使用前明确赋值即可。不要一开始就给它分配 null ,否则它肯定已经被分配了。分配它,就像您已经对 if/else block 所做的那样,您会没事的。

final String finalVersion;
if (someThing == 1) {
    finalVersion = "The value was 1.";
} else {
    finalVersion = "The value is not 1.";
}

关于Java使用非final变量设置final变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268141/

相关文章:

python - 在 python 中使用带有可变字符串的条件

list - 代码质量/ Guava : clear and fill a final list or assign a new Immutablelist

java - 为什么本地类接受静态最终变量?

java - 什么是NullPointerException,我该如何解决?

java - 当我将图像路径传递给其他 Activity 时,会发生 StringIndexOutOfBoundsException

java - 为什么 VisualVm 和 JOL 工具对对象大小给出不同的结果

c++ 带有静态变量的静态函数的奇怪行为

c++ - 数组到变量

java - SmartGWT ListGrid 最终版

java - 错误:(31, 40)错误: incompatible types: android. support.v4.app.Fragment无法转换为android.app.Fragment