問題タブ [multi-catch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java のマルチキャッチ機能で例外を最終にする必要があるのはなぜですか?
Java 7 に追加されたmulti-catch 機能に関する Oracle のドキュメントには、catch
句の例外パラメーターが暗黙的に であると記載されていますfinal
。
私の質問は次のとおりです。そのような制限のポイントは何ですか? それがもたらす重要な改善が1つも見つからないように見えるからです。参照オブジェクトを としてマークすることfinal
は、それが参照するオブジェクトではなく、参照自体を変更から保護するだけであり、別の参照を作成してそれを好きなように変更することを決して禁止しません。
SO に関するやや関連性のある質問では、catch
句の例外参照を変更することが最も賢明なことではない理由について説明していますが、それは句のマルチキャッチ形式だけでなく、句の使用に関連しています。catch
では、なぜ Java はマルチキャッチの例外を作成し、それを特別な方法で扱うのでしょうか?
java - Java 7 の結合/マルチキャッチ ブロックの正式名称はありますか?
Java 7 機能を意味する「複数の catch ブロック」という用語の間に曖昧な点がある複数の catch ブロックと結合された catch ブロックについてここで説明すると、次のようになります。
および「複数の catch ブロック」は文字通り、複数の catch ブロックを意味します。
Java 7 の機能に、複数の例外をキャッチする古いスタイルと明確に区別するために使用できる特定の正式な名前があるかどうかを調査しました。ただし、Oracle ソースではこの機能の名前はどこにもないようですが、他の一部のソース ( EclipseやSOなど) では「マルチキャッチ」ブロックと呼ばれています。
この機能にオラクルが付けた正式な名前はどこにありますか?
java - マルチキャッチ例外ハンドラでの順序
Java 7以降を使用できることは知っていますがmulti-catch
、以前のバージョンのJavaのように例外の順序が重要かどうか疑問に思いますか? たとえば、例外を入れてからSQLException
、IOException
?
または、このようにする必要がありますか?
playframework - Java 7 マルチキャッチ使用時の Play Framework 例外
私は Play 2.1.3 を使用していますが、奇妙な理由で Java 7 のmulti-catch構造を使用できないようです。switch でダイヤモンドや文字列を使用できるので、Play は確実に Java 7 を使用しています。
これは、マルチキャッチを使用するコントローラーをロードするときに発生する例外です。何か案が?
(controllers.PurchasesController.submitData
スタック トレースで参照されるメソッドは、マルチキャッチを含むメソッドです)。
java - コンパイル時のマルチキャッチ例外タイプの決定
私は本当に理解できないものを構築しました - それがどのように機能するのかわかりません。このマルチキャッチの説明記事に慣れてきました。
次の 2 つの例外とコードを検討してください。
メソッドは同じですが、を呼び出すことはできませんgetCustomValue()
.Javaの内部では、上記try/catch
は実際にMyException1/2
to をキャストすることになっているためException
です(ドキュメントを理解した方法です)。
ただし、次のようなインターフェイスを導入すると:
それを両方の例外に追加すると、Javaは実際にそのメソッドを使用できるようにします。そして、これを呼び出すことは有効です:
要するに、私の質問は次のとおりです。ここで実際に何が起こっているのか: (MyException1|MyException2 e)
.
とはe
?
最も近いスーパークラスが のタイプとして選択されてい
e
ますか? この質問はそれについて尋ねており、おそらくそれが答えです。もしそうなら、e にアクセスしたときに CustomValueGetter インターフェイスが「見える」のはなぜですか? 私の場合e
、Exception
.そうでない場合、実際のクラスがどちらかである場合、
MyException1
またはMyException2
これらのクラスの両方で利用可能な同じメソッドを単に呼び出すことができないのはなぜですか?e
両方の例外のすべての共通インターフェースを実装し、最も近い共通スーパークラス型である、動的に生成されたクラスのインスタンスですか?
swift2 - Swift 2 - マルチキャッチを試す
私は少し検索しましたが、何も見つかりませんでした.このサイトの質問でさえありません.Swift 2がJavaのようなマルチキャッチブロックをサポートしているかどうか疑問に思っています.
Java の例:
Swift では、同様のソリューションを実装できませんでした。This questionは、1つの列挙型のさまざまなエラーを処理するための優れた方法を説明してErrorType
いますが、HTTP応答からのメッセージでエラーが初期化されるため、私の要件は異なるようです. これは私の列挙型です:
その列挙型のエラーをスローしたいときは、次のようなコードを使用します。
ここで、呼び出し元のメソッドで、列挙型のすべてのエラーを個別にキャッチする必要がありますが、すべて同じようにしたいのですが ( を除きますが、NOT_FOUND
ここでは問題ありません)。
Swift 2 には本当にマルチキャッチが含まれていないのですか? または、私の問題を解決するのに役立つ別の解決策はありますか?
編集:私の希望する動作がはっきりしていないようです: タイプ HTTPError (HTTPError.NOT_FOUND を除く) のエラーを同じ方法で処理したいので、マルチキャッチを求めています。
認識していないすべてのエラー (タイムアウト、nil-access など) をカバーするために、一般的な catch-block を引き続き実装しますが、バックエンド メッセージに伴うエラーは特別に処理する必要があります。
ありがとう、チャッキー
java - マルチキャッチで例外クラスを解決できません
multicatch (Java 7 以降) を使用してカスタム例外クラスを作成しています。これは私が作成したクラスです。次のコードを参照してください。
上記のクラスは、次のクラスによって拡張されます。
これを実行しようとするたびに、「例外」を持つ同じコンストラクターが呼び出されます。なぜそれが起こっているのですか?
ただし、マルチキャッチ構文を次のコードに置き換えると。期待どおりに動作しています。
マルチキャッチを使用して必要な例外をスローするために私ができる変更を手伝ってください。