問題タブ [checked-exceptions]
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 - RuntimeExceptionが処理されない場合に警告を表示するようにEclipseを設定できますか?
私は次のコードを持っています:
メソッド宣言で宣言されているが、行でキャッチされていないキャッチされていないランタイム例外で警告/エラーを表示できるEclipseの構成はありますwillItThrowException();
か?
java - Java 例外と内部例外、これは正しく行っていますか?
xsd に対して xml を検証していますが、例外を処理する必要がある場合が多いことがわかりました。
これらはJavaでチェック例外と呼ばれていると思いますか?
このコード ブロックはどのように記述すればよいですか?
try/catch 内にネストされた try/catch を使用しますか?
java - Guavaキャッシュとチェック済み例外の保持
guavaCacheを使用するようにいくつかのコードをリファクタリングしています。
初期コード:
何かを壊さないために、スローされた例外をラップせずにそのまま保持する必要があります。
現在の解決策はやや醜いようです:
それをより良くするための可能な方法はありますか?
java - 関数を呼び出すときに「例外をスローする」必要があるのはなぜですか?
コンパイラがそのメソッドshow2()
を報告する理由、、、show3()
およびmain()
報告されていない例外キャッチするか、スローするように宣言する必要がある例外
throws Exception
これらのメソッドから削除するとどうなりますか?
java - メソッドの署名で例外をスローできない場合に例外をスローする方法は?
私はこのような方法を持っています:
Exception
インサイドを投げたいgetSomething()
。Exception
私のメソッドがそこにスローされることを許可していないため、コンパイラはそれを許可しません。Exception
しかし、テスト用にのサブクラスをスローする必要があります( Unchecked をスローすることはできませんException
)。これは明らかにハックですが、テストには必要です。EasyMock を試しましたが、それもできません。それを行う方法はありますか?
ありがとう、ショーン・グエン
java - JLS のどの部分が、チェックされた例外をチェックされていないかのようにスローできることを正当化しますか?
私は最近、javac コンパイラーを介してチェック済み例外をこっそりとスローして、スローしてはならない場所にスローすることが可能であるという事実を発見し、ブログに書きました。これは Java 6 および 7 でコンパイルおよび実行され、with or 句がスローさSQLException
れthrows
ますcatch
。
生成されたバイトコードは、JVM がチェック済み/未チェックの例外をあまり気にしていないことを示しています。
これを受け入れるJVMは1つのことです。しかし、Java-the-languageがそうあるべきかどうか、私には疑問があります。JLS のどの部分がこの動作を正当化しますか? バグですか?それとも、Java 言語の隠れた「機能」ですか?
私の気持ちは次のとおりです。
doThrow0()
はin に<E>
バインドされています。したがって、JLS §11.2の行に沿った節は では必要ありません。RuntimeException
doThrow()
throws
doThrow()
RuntimeException
は との代入互換性があるため、コンパイラによってException
キャスト (結果として) が生成されません。ClassCastException
java - チェックされた例外とチェックされていない例外を理解するのに苦労しました
これについてできることはすべて読みましたが、チェック済み例外とチェックなし例外の使用方法をまだ理解していません。まだまだコンセプトが理解できていないと思います。チェックされた例外ではなくチェックされていない例外を使用する方が良いことを StackOverflow で読みましたが、Eclipse では、次のようにチェックされた例外を使用するように強制FileNotFoundException
されます(私の知る限り、Eclipse が try/catch ブロックを挿入するように強制する場合、それはチェックされた例外です)。チェックされているものをチェックされていないものに変換する方法はありますか?一体何を扱っているのですか?例外を処理するとはどういうことかわかりません。
ここにこの例があります。これを処理する方法 (?) を本当に知りたいです。これはチェック例外ですよね?
私は人々がここでしていることをいろいろ見てきました。スタックトレースを出力する人もいますが、それは私が通常行っていることであり、問題はありません。デバッグに必要な情報が得られます。それらを無視する人もいますが、それはすべきではないと思います (JNode OS ブーターが例外を無視しているのを見ました)。throws
一部の人々は、署名に宣言を追加するだけです。その中にさらに例外をスローする人もいます! (多分これは、チェックされた手段の代わりにチェックされていないものを使用することだと思いますか?)
さらに、throws
宣言を追加すると、try/catch ブロックをさらに上に置く必要があり、非常に大きなアプリケーションの場合は不便です。申し訳ありませんが、私は単に無知です。完全に。私は優れたエレガントなデザインを学ぼうとしていますが、これは私を苦しめています.
java - 壊滅的な例外への対処
私はC#の入門書を読みましたが、それをどうするかわからない場合は例外をキャッチするべきではありません。Javaでプログラミングしているときにそのアドバイスを考えると、例外をどうすればよいかわからないことがありますが、コンパイルエラーを回避するために、それをキャッチするか「浸透」させる必要があります。throws
呼び出しツリーのずっと上まで句を含むメソッドを乱雑にしたくないのでRuntimeException
、次のように例外をaに「変換」することにしばしば頼りました。実際には「処理」されていない(適切に処理されていない)例外の多くのメソッドに句を追加するthrows
と、冗長で気が散るように見えます。次の悪いスタイルですか?もしそうなら、これに対処するためのより良い方法は何ですか?
編集:混乱は別として、パーコレーション例外には別の問題があります。コードの改訂後、おそらくいくつかの不要なthrows
句が発生することになります。それらをクリーンアップするために私が知っている唯一の方法は、試行錯誤によるものです。それらを削除して、コンパイラーが文句を言うかどうかを確認します。明らかに、コードをクリーンに保ちたい場合、これは厄介です。
java - Thread.sleep() の呼び出しでハンドルされない例外のコンパイル エラーを修正するにはどうすればよいですか?
私はJavaが初めてで、プログラミングも初めてです(Javaに直接飛び込むのはおそらく最高のアイデアではなかったことを知っています)。プログラムに一時停止を追加しようとしても、一貫してエラーが発生します。私は単純なカウント プログラムを実行しており、各数値の間に 1 秒の遅延を追加したいと考えています。これまでのコードは次のとおりです。
への呼び出しThread.sleep()
はコンパイルされません。コンパイラは、「報告されていjavac
ない例外 InterruptedException; スローされるようにキャッチまたは宣言する必要があります」と言い、Eclipse は「ハンドルされていない例外タイプ InterruptedException」と言います。
java - Java 8: ラムダ式で必須のチェック例外処理。なぜ任意ではなく必須なのですか?
私は Java 8 の新しいラムダ機能をいじっていて、Java 8 が提供するプラクティスが本当に役立つことを発見しました。ただし、次のシナリオを回避する良い方法があるのではないかと考えています。たとえば、オブジェクト プールを埋めるためにある種のファクトリを必要とするオブジェクト プール ラッパーがあるとします ( を使用java.lang.functions.Factory
):
関数型インターフェースをラムダ式に変換すると、上記のコードは次のようになります。
確かにそれほど悪くはありませんが、チェックされた例外にはラムダ内に/ブロックjava.sql.SQLException
が必要です。私の会社では、長い間 2 つのインターフェイスを使用しています。try
catch
IOut<T>
java.lang.functions.Factory
これは;と同等です。- 通常はチェック例外の伝播が必要な場合のための特別なインターフェース:
interface IUnsafeOut<T, E extends Throwable> { T out() throws E; }
.
IOut<T>
Java 8 への移行中にとの両方IUnsafeOut<T>
が削除されるはずですが、 と完全に一致するものはありませんIUnsafeOut<T, E>
。ラムダ式がチェックされた例外をチェックされていないかのように処理できる場合、上記のコンストラクターで次のように単純に使用できる可能性があります。
それはずっときれいに見えます。ObjectPool
スーパークラスを書き直してIUnsafeOut<T>
私たちの
- に似たものを実装し
IUnsafeOut<T, E>
ますか?(正直なところ、私はそれを汚いと考えています-サブジェクトは何を受け入れるかを選択する必要があります:どちらか、Factory
または互換性のあるメソッドシグネチャを持つことができない「安全でないファクトリ」) - ラムダでチェック例外を無視するだけなので、
IUnsafeOut<T, E>
サロゲートは必要ありませんか? (なぜですか?たとえば、別の重要な変更:私が使用しているOpenJDKは、匿名クラス[関数インターフェイス]またはラムダ式でキャプチャされるjavac
ように変数とパラメーターを宣言する必要がなくなりました)final
したがって、問題は一般的に次のとおりです。ラムダでチェック済み例外をバイパスする方法はありますか、またはJava 8が最終的にリリースされるまで、将来的に計画されていますか?
更新 1
うーん、私たちが現在持っているものを理解している限り、参照されている記事は 2010 年のものですが、現時点では方法がないようです: Brian Goetz は Java で例外の透過性を説明しています。Java 8 で何も変わっていない場合、これは答えと見なすことができます。また、Brian は、interface ExceptionalCallable<V, E extends Exception>
(私が言及しIUnsafeOut<T, E extends Throwable>
たコードの遺産から外れたもの) はほとんど役に立たないと言い、私も彼に同意します。
私はまだ何か他のものを見逃していますか?