[英]Final variable assignment with try/catch
因為我相信這是一個良好的編程習慣,我把我所有的(本地或實例變量) 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;
}
}
不,它不是正確的位置,想象一下您的try and catch塊中有1條以上的語句,第一個語句是:x =42。在其他語句之后,try塊失敗了,然后轉到catch塊,在此處假設x =30。現在您定義了x兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.