gpt4 book ai didi

java - 使用 try/catch 进行最终变量赋值

转载 作者:IT老高 更新时间:2023-10-28 13:53:46 28 4
gpt4 key购买 nike

因为我相信这是一种很好的编程习惯,所以我将所有(本地或实例)变量设为final,如果它们打算只编写一次的话。

但是,我注意到,当变量赋值可能引发异常时,您不能将所述变量设为 final:

final int x;
try {
x = Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
x = 42; // Compiler error: The final local variable x may already have been assigned
}

有没有办法在不使用临时变量的情况下做到这一点? (或者这不是最终修饰符的正确位置吗?)

最佳答案

一种方法是引入一个(非 final )临时变量,但您说您不想这样做。

另一种方法是将代码的两个分支移动到一个函数中:

final int x = getValue();

private int getValue() {
try {
return Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
return 42;
}
}

这是否实用取决于具体的用例。

总而言之,只要x是一个适当范围的局部变量,最实用的通用方法可能是将其保留为非 final .

另一方面,如果 x是成员变量,我的建议是使用非 final初始化期间临时:

public class C {
private final int x;
public C() {
int x_val;
try {
x_val = Integer.parseInt("someinput");
}
catch(NumberFormatException e) {
x_val = 42;
}
this.x = x_val;
}
}

关于java - 使用 try/catch 进行最终变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13604111/

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