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

Vin*_*ina 15 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;
Run Code Online (Sandbox Code Playgroud)

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

编辑:通过"更好",我的意思是我正在寻找一种方法来定义最终变量,不需要我创建一个额外的变量.我知道创建一个额外的变量是低效的,而不是一个好的做法,而且我很肯定必须有一种方法可以在没有额外步骤的情况下完成需要完成的工作.

我收到了一个答案,我已将其标记为已接受.正如我在评论中所述,我最初尝试过提供的解决方案,但收到了Eclipse的错误.我必须在第一次输入错误,或者Eclipse有一些"打嗝".

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

rge*_*man 26

您可以声明一个final变量而不是分配它,只要它在您使用之前已经明确分配.不要将其分配null给开头,否则它将被明确分配.像你已经使用if/ elseblocks 一样分配它,你会没事的.

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

  • @VingInMedina有一个很好的机会,Eclipse搞砸了或者落后了.Eclipse是......不是很好. (2认同)

man*_*uti 14

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

final String finalVersion = someThing == 1 ? "The value was 1." : "The value is not 1.";
Run Code Online (Sandbox Code Playgroud)

  • @RaulLuna在这种情况下,它更具可读性和简洁性:1行而不是6行.性能方面,差异可以忽略不计...... (3认同)