为什么 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
,将不再处理它。
我在使用带有 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
,将不再处理它。