6

チェックされた例外とチェックされていない例外の違いを理解しています。Java コンパイラでは、プログラマは、チェックされた例外を try/catch ブロックで囲むか、メソッド シグネチャに throw 宣言を追加する必要があります。

ただし、Eclipse では、コンパイラーがステートメントを try/catch ブロックで囲み、スローしないというオプションしか与えないことが時々あります。これはなぜですか?これは、継承階層において、クラス (例外を生成する可能性のあるコードを含む) が最上位にあるためでしょうか?

Hadopp例として、私はマッパーのマップ関数を書いていました:

public void map(BytesWritable key, Text value, Context context) {
    String[] fields = value.toString().split("\t");
    String referrer = fields[10];
    context.write(new LongWritable(referrer.length()), new Text(
                    referrer));
}

これは非常に単純なマップ関数です。行からフィールドを抽出し、その長さをキーとして、それ自体を値として出力しています。今、スローされるエラーUnhandled exception type InterruptedExceptionが発生しContext.write()、Eclipse はそれを try/catch ブロックで囲み、階層の上方にスローしないオプションのみを提供します。これはなぜですか?

Context.write リファレンスとして、 hereの関数シグネチャを読むことができます。

ありがとう。

4

2 に答える 2

2

throwsメソッドシグネチャの一部です。抽象メソッドを定義する場合は、その署名に従う必要があります。throws実装中に を追加することはできません。

于 2013-07-27T02:58:07.493 に答える