IDE强制使用try/catch包围但不抛出异常

abh*_*rni 6 java exception-handling exception try-catch

我理解已检查和未检查的异常之间的区别.Java编译器强制程序员使用try/catch块包围已检查的异常,或者在方法签名中添加throw声明.

但是有时我看到在Eclipse中,编译器只给我一个选项来用try/catch块包围语句而不抛出它.为什么会这样?这是因为在继承层次结构中,类(包含可能产生异常的代码)位于顶部吗?

作为一个例子,我正在为Hadoppmapper 编写一个map函数:

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));
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的映射函数,我从一行中提取一个字段,并将其长度作为键,并将其自身作为值.现在,我得到一个抛出的错误Unhandled exception type InterruptedException,Context.write()Eclipse只给我一个选项,可以通过try/catch块包围它,而不是在层次结构中向上抛出它.为什么会这样?

有关参考,您可以阅读Context.write 此处的功能签名.

谢谢.

roc*_*boy 2

throws是方法签名的一部分。如果您定义抽象方法,则必须遵守其签名。您无法throws在实施时添加 。