看到过很多 httpclient timeout,socket timeout(mysql,smtp) 几乎从来没见过哪个异常日志输出具体目标地址。一旦出现只能靠猜。 这个现象是底层库作者人性扭曲还是上层开发者道德沦丧。。 我觉得要是我来实现一个 httpclient 的 get 方法,出现了异常,应该是要抛出具体地址吧?不然很多开发者直接 httpclient.get(url) 没有 try 的话,最后抛出了异常,根本不知道是什么情况啊
1
6IbA2bj5ip3tK49j 2022-05-25 01:03:42 +08:00 via iPhone
这问题 n 年前就讨论过了
|
2
6IbA2bj5ip3tK49j 2022-05-25 01:06:20 +08:00 via iPhone
|
4
cheng6563 2022-05-25 10:00:16 +08:00
你看 NPE 也没说哪个方法异常,Android 除外
|
5
nothingistrue 2022-05-25 10:01:51 +08:00 2
如果我没记错的话,timeout 隶属于 IOException ,这是个 CheckException 。谁处理谁负责,URL 是上层给的,就应该上层负责。httpclient 这一层如果优化了异常信息是优点,如果不优化但是抛出了 CheckException (或者虽然抛出 RuntimeException 但是给出了明确的 throws 声明)那是本质。
“很多开发者直接 httpclient.get(url) 没有 try ”,责任是出在这里的,把这个责任推到 httpclient 这一层,那是道德绑架。 |
6
Bromine0x23 2022-05-25 22:47:54 +08:00
@cheng6563 然而 Java 15 以后确实会了
|