Java 为什么UnsupportedEncodingException不是RuntimeException的子类?

Java 为什么UnsupportedEncodingException不是RuntimeException的子类?,java,exception,runtimeexception,Java,Exception,Runtimeexception,在使用UTF-8编码的URLCoder时,我遇到了不支持的编码异常,它迫使我这样编写代码: stringfoo=…//包含不安全字符 试一试{ foo=urlcoder.encode(foo,“UTF-8”); }捕获(不支持的编码异常e) //做一些不应该发生的事情 } 而不仅仅是这样: stringfoo=…//包含不安全字符 foo=urlcoder.encode(foo,“UTF-8”); 不鼓励使用UTF-8以外的任何编码: 注:万维网联盟建议使用UTF-8。不这样做可能会导致不兼

在使用UTF-8编码的
URLCoder
时,我遇到了
不支持的编码异常
,它迫使我这样编写代码:

stringfoo=…//包含不安全字符
试一试{
foo=urlcoder.encode(foo,“UTF-8”);
}捕获(不支持的编码异常e)
//做一些不应该发生的事情
}
而不仅仅是这样:

stringfoo=…//包含不安全字符
foo=urlcoder.encode(foo,“UTF-8”);
不鼓励使用UTF-8以外的任何编码:

注:万维网联盟建议使用UTF-8。不这样做可能会导致不兼容

而且UTF-8编码应该始终可用,至少根据文档中的页面

对于这个问题的公认答案是“它不可能发生,除非JVM中存在根本性的缺陷”


所以我想知道,为什么UnsupportedEncodingException类不扩展RuntimeException类,这将允许我使用第二个代码段?这仅仅是因为它现在就存在并且很难改变吗?

如果改变了,一些现有的代码可能会被破坏。比如说

try {
    ... do something that could throw UnsupportedEncodingException
} catch (IOException e) {
    ... handle the exception
}

如果
UnsupportedEncodingException
不再是
IOException
它将不再被处理。

如果这一点被更改,一些现有代码可能会被破坏。比如说

try {
    ... do something that could throw UnsupportedEncodingException
} catch (IOException e) {
    ... handle the exception
}

如果
UnsupportedEncodingException
不再是
IOException
,它将不再被处理。

您的理由是什么,为什么它应该是
RuntimeException
?“我不想抓住它”不是最有力的论据。我的理由是我不想抓住一个永远不会发生的异常@大牛你可以用你自己的方法把丑陋隐藏在一个地方。如果我不得不多次使用它,我会这么做,幸运的是,我不必这么做。看到这个我还是很烦@在Java10的HenryAs中,有一个不会抛出异常的字符集,因为显然字符集已经有效了。因此,您可以编写
URLEncoder.encode(foo,StandardCharsets.UTF_8)
,而不需要try/catch。您认为它应该是
运行时异常的确切原因是什么?“我不想抓住它”不是最有力的论据。我的理由是我不想抓住一个永远不会发生的异常@大牛你可以用你自己的方法把丑陋隐藏在一个地方。如果我不得不多次使用它,我会这么做,幸运的是,我不必这么做。看到这个我还是很烦@在Java10的HenryAs中,有一个不会抛出异常的字符集,因为显然字符集已经有效了。因此,您可以编写
URLEncoder.encode(foo,StandardCharsets.UTF_8)
,而无需尝试/捕获。