[解決済み] try/catchによる最終的な変数の割り当て
2023-08-28 13:09:04
質問
私はそれが良いプログラミングの習慣だと信じているので、すべての(ローカルまたはインスタンス)変数を
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;
}
}
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
Jsoup-Crawlingの動作
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
Javaがテキストファイルを読み込む
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaにおける "final class "の意味とは?
-
[解決済み] Javaの "final "キーワードはどのように機能するのでしょうか?(オブジェクトを修正することは可能です。)
-
[解決済み] Javaリフレクションを用いた静的なプライベートfinalフィールドの変更
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
プロジェクトの依存関係を解決できない。
-
java.sql.SQLException: 結果セットの開始前
-
アノテーション「@Retention」の役割
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
java send https request prompt java.security.cert.について。
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
java 365*1000*60*60*24 計算問題
-
テストが空であるかどうかを判断するためのオプションの処理
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。