반응형
try / catch를 사용한 최종 변수 할당
좋은 프로그래밍 관행이라고 믿기 때문에 final한 번만 작성하려는 경우 모든 (로컬 또는 인스턴스) 변수를 만듭니다.
그러나 변수 할당이 예외를 throw 할 수있는 경우 해당 변수를 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를 두 번 정의했습니다.
참고 URL : https://stackoverflow.com/questions/13604111/final-variable-assignment-with-try-catch
반응형
'Program Club' 카테고리의 다른 글
| Android : launchMode =“singleTask”의 버그? (0) | 2020.11.28 |
|---|---|
| Spring MVC에서 init 바인더의 목적은 무엇입니까 (0) | 2020.11.28 |
| Scala의 @inline 주석이 실제로 성능에 도움이됩니까? (0) | 2020.11.28 |
| Scala의 @inline 주석이 실제로 성능에 도움이됩니까? (0) | 2020.11.28 |
| CORS 및 Access-Control-Allow-Headers는 어떻게 작동합니까? (0) | 2020.11.28 |