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

时间:2015-05-15 20:24:11

标签: 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有一些"打嗝"。

我接受有许多方法可以做某事,一个人接受的最佳方式不是别人会考虑的。但是,这里包含的所有答案都很明确,而且我觉得这解决了我的问题。

2 个答案:

答案 0 :(得分:26)

您可以声明final变量而不是分配它,只要在使用它之前明确分配它。不要将它null指定为开头,否则它将被明确分配。按照您if / else块的方式对其进行分配,您就可以了。

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

答案 1 :(得分:14)

除了@ rgettman的回答,对于这种情况,你可以使用三元运算符

final String finalVersion = someThing == 1 ? "The value was 1." : "The value is not 1.";