Java 8 のメソッド参照で処理されない例外
2023-10-06 12:12:50
質問内容
私はJava 8を使ったプロジェクトに取り組んでいますが、理解できない状況を1つ見つけました。
私はこのようなコードを持っています。
void deleteEntity(Node node) throws SomeException {
for (ChildNode child: node.getChildren()) {
deleteChild(child);
}
}
void deleteChild(Object child) throws SomeException {
//some code
}
このコードは問題なく動作していますが、メソッド参照で書き換えることができますね。
void deleteEntity(Node node) throws SomeException {
node.getChildren().forEach(this::deleteChild);
}
そして、このコードはコンパイルされず、次のようなエラーが発生します。
Incompatible thrown types *SomeException* in method reference
.
また、IDEAは次のようなエラーを出しました。
unhandled exception
.
そこで質問ですが、なぜでしょうか?なぜfor eachループのコードはコンパイルされ、lambdaのコードはコンパイルされないのでしょうか?
どのように解決するのですか?
もし、あなたが
Consumer<T>
インターフェースを見ると
accept
メソッド (このメソッド参照が事実上使用しているものです) はチェックされた例外をスローするように宣言されていません。
は
であるメソッド参照は使用できません。強化されたforループは問題ありません。なぜなら、そこでは常に
SomeException
を投げることができるからです。
チェックされた例外をチェックされていない例外に変換するラッパーを作成し、それを投げることができる可能性があります。あるいは、独自の関数インターフェイスを
accept()
メソッドで
を行う
はチェックされた例外を投げます(おそらくその例外でインターフェースをパラメータ化します)、そして、あなた自身の
forEach
メソッドを書いてください。
関連
-
CertificateException: XXXに一致するサブジェクトの代替DNS名が見つかりません 解決策
-
eclipse にリソースリーク:'in' が閉じない
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java 8 List<V> を Map<K, V> に変換する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
Uncaught ReferenceError: は定義されていません。
-
無効なメソッド宣言
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
java send https request prompt java.security.cert.について。
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
コンストラクタDate()が未定義である問題
-
[解決済み] Java 8のストリーム内部からCHECKED例外を投げるにはどうすればよいですか?