1. ホーム
  2. java

[解決済み] Runnableのrun()で例外をスローさせる方法はありますか?

2023-04-30 15:44:37

質問

で呼んでいるメソッドが run() を実装しているクラスで 実行可能 を実装しているクラスでは、例外を投げるように設計されています。

しかし、Javaコンパイラはそれをさせてくれず、try/catchで囲むことを提案します。

問題は、try/catchで囲むことで私は その特定の run() は役に立たない。I する はその例外を投げたいのです。

もし私が throws を指定すると run() を呼び出すと、コンパイラは次のような文句を言います。 Exception is not compatible with throws clause in Runnable.run() .

普段は、私はまったく問題なく を実行させなくても全く問題ありません。 が例外を投げないようにするのは全く問題ありません。しかし、私はその機能を持たなければならないユニークな状況を持っています。

この制限を回避するにはどうしたらよいでしょうか。

どのように解決するのですか?

を実装したクラスを渡したい場合。 Runnable を実装したクラスを Thread フレームワークのルールに従わなければならないので、Ernest Friedman-Hill の回答を参照してください。

私は直感的に、あなたは run メソッドを直接呼び出し、呼び出し元のコードが例外を処理できるようにしたいのだと思います。

この問題に対する答えは簡単です。 この問題を解決するには Runnable インターフェースを使わず、チェックした例外を投げることができるようにシグネチャを変更した独自のインターフェースを作成することです。

public interface MyRunnable
{
    void myRun ( ) throws MyException;
}

このインターフェイスを実際の Runnable (チェックされた例外を処理することで) Thread フレームワークで使用するのに適しています。