为什么 UnsupportedEncodingException 不是 RuntimeException 的子类?

Why is UnsupportedEncodingException not a subclass of RuntimeException?

我在使用带有 UTF-8 编码的 URLEncoder 时遇到了 UnsupportedEncodingException,它迫使我像这样编写代码:

String foo = ... // contains unsafe characters
try {
    foo = URLEncoder.encode(foo, "UTF-8");
} catch (UnsupportedEncodingException e)
    // do something with the exception that should never occur
}

不仅如此:

String foo = ... // contains unsafe characters
foo = URLEncoder.encode(foo, "UTF-8");

documentation of URLEncoder 不鼓励使用 UTF-8 以外的任何编码:

Note: The World Wide Web Consortium Recommendation states that UTF-8 should be used. Not doing so may introduce incompatibilities.

并且 UTF-8 编码应该始终可用,至少根据文档中的 Supported Encodings 页。

关于 how to handle the UnsupportedEncodingException 问题的可接受答案是“它不可能发生,除非您的 JVM 中存在根本性的损坏”。

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

如果对此进行更改,一些现有代码可能会被破坏。例如

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

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