锁定老帖子 主题:老掉牙的话题,java的异常处理。
精华帖 (1) :: 良好帖 (6) :: 新手帖 (12) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-19
喜欢checkedException多是自以为是。喜欢替别人乱作决定,失去基本权利观的认知。
|
|
返回顶楼 | |
发表时间:2011-03-19
carlkkx 写道 ppgunjack 写道 有checked你可以默认所有没异常申明的函数都是ok的,除了那些申明自己要抛的不用太关心那些没申明的
你使用api是不可能每个都去看文档的 我原来之所以会在dao采取这种方式因为我认为每个dao函数都应该有抛异常的可能,用check的话上层调用写起来太罗嗦,尤其再加个接口,实际spring的dao也是这样处理 而实际普遍考虑,大部分api是不应该我们操心问题的,如果有异常声明,则我们只用关注这些少量的问题点 如果全部都runtime那我们就要考虑每个调用可能造成的中断,每个api我都要参考它的文档关于异常的描述 另外一旦调用链拉长,a->d的文档是不会都那么全面和可靠,因为抛异常的可能性会随链的长度相乘 大多复杂性就是通过分而治之解决的,你非要担心你所面临的API以外的东西,那有什么办法呢?这样担心那就有太多担心了,这样的话,集成电路OK不OK那也是担心的。 依赖库调用的程序做异常设计是基于少数抛异常,多数不抛的原则设计 另外用文档来保证异常设计很天真,如果没有约束就连自己设计库都很难保证下层不会出乱子透过自己丢到上面,所有的异常都是runtime那么所有异常都可以有很大机会一直窜到根部调用,把你精心构建的异常层次搅得乱七八糟 我看你并不能很清楚的理解约束与自由的关系和它们带来的作用和副作用,也不能理解级联调用带来隐患的可能性随级联数目是乘法式的上升 |
|
返回顶楼 | |
发表时间:2011-03-19
API设计者没有资格要求?
那你用框架和回调不是典型的被api设计者要求 你用别人的库,别人很清楚的告诉你我提供服务的方式就是我做成你正常走,做不成我返回问题,你要接收,这是语言级别的约束,并且这是库设计者可以自己选择的哲学,你自己写完全可以绕过 灵活的代价就是容易出错,就像指针,这也是语言设计者的哲学,对于异常至少你还能绕过去,想要指针连门斗没有 js更灵活更没约束,写js代码比java更容易写错 |
|
返回顶楼 | |
发表时间:2011-03-19
ppgunjack 写道 carlkkx 写道 ppgunjack 写道 有checked你可以默认所有没异常申明的函数都是ok的,除了那些申明自己要抛的不用太关心那些没申明的
你使用api是不可能每个都去看文档的 我原来之所以会在dao采取这种方式因为我认为每个dao函数都应该有抛异常的可能,用check的话上层调用写起来太罗嗦,尤其再加个接口,实际spring的dao也是这样处理 而实际普遍考虑,大部分api是不应该我们操心问题的,如果有异常声明,则我们只用关注这些少量的问题点 如果全部都runtime那我们就要考虑每个调用可能造成的中断,每个api我都要参考它的文档关于异常的描述 另外一旦调用链拉长,a->d的文档是不会都那么全面和可靠,因为抛异常的可能性会随链的长度相乘 大多复杂性就是通过分而治之解决的,你非要担心你所面临的API以外的东西,那有什么办法呢?这样担心那就有太多担心了,这样的话,集成电路OK不OK那也是担心的。 依赖库调用的程序做异常设计是基于少数抛异常,多数不抛的原则设计 另外用文档来保证异常设计很天真,如果没有约束就连自己设计库都很难保证下层不会出乱子透过自己丢到上面,所有的异常都是runtime那么所有异常都可以有很大机会一直窜到根部调用,把你精心构建的异常层次搅得乱七八糟 我看你并不能很清楚的理解约束与自由的关系和它们带来的作用和副作用,也不能理解级联调用带来隐患的可能性随级联数目是乘法式的上升 如果在你这层上你确实不认为你可以处理什么,那么底下的错误往上抛又有何妨?这就是你要向上报告的问题。 底下如果是受检异常而你又确实认为你无能为力,这才是给你带来了麻烦。复杂性总是控制你和你的直接关系那一方,事情才能变得简单。越复杂越是松散的结构才能应对,好比社会是一个非常复杂的系统,有些人自以为聪明想搞计划经济,想自顶向下,结果反而一团糟,而市场经济更强调个人权利,看似没有控制却是无为而无不为。 |
|
返回顶楼 | |
发表时间:2011-03-19
ppgunjack 写道 API设计者没有资格要求?
那你用框架和回调不是典型的被api设计者要求 你用别人的库,别人很清楚的告诉你我提供服务的方式就是我做成你正常走,做不成我返回问题,你要接收,这是语言级别的约束,并且这是库设计者可以自己选择的哲学,你自己写完全可以绕过 灵活的代价就是容易出错,就像指针,这也是语言设计者的哲学,对于异常至少你还能绕过去,想要指针连门斗没有 js更灵活更没约束,写js代码比java更容易写错 你怎么单独领出这一句?这是回应另一个人的,指的是API设计者没有资格要求调用者怎么处理错误。你的模块要么完成你定义的任务要么向上报考问题,而不能指着上面说你一定要处理我或者你也一定要向像我这样声明强制你的上面,这是越权,你凭什么对着上面指手划脚,上面的场景你了解还是上面的使用者了解? |
|
返回顶楼 | |
发表时间:2011-03-20
底下的错误往上抛没问题
但问题在于你自己没控制住,底下也往上抛 形象的说就像上访,很可能你一个疏忽就直接到最上面,把你的上面,你上面的上面也弄崩 没有约束的含义就是你不注意,我就能越过你到你上面,你上面没意识到我能越过你没做保护我就可能通到你上面的上面 这个例子可能不恰当,因为这里的上访是会造成破坏性后果 仅仅因为你自己的疏忽带来的上访会破坏层层已经做好的异常处理流程,而这个疏忽显然不会被计入文档,因为根本没有约束,你自己都没意识到 这种破坏的可能性会随调用链的数目指数上升 资本主义是市场经济但不是自由经济,该干预一样会强制干预,有些约束你一样必须遵守 |
|
返回顶楼 | |
发表时间:2011-03-20
“API设计者没有资格要求调用者怎么处理错误”
这里不是API设计者要求调用者怎么处理错误,而是要求调用者接受通知,怎么处理还是调用者自己决定 就和发信的回执一样,重要的会强迫你发出回执,jms也有强制要求收到消息确认 |
|
返回顶楼 | |
发表时间:2011-03-20
你别觉得你用别人的库,别人就是下级,你用电信的服务,电信条款也会写明出了问题我不付什么责任,你有什么问题你来保修
|
|
返回顶楼 | |
发表时间:2011-03-20
仅仅因为你自己的疏忽带来的上访会破坏层层已经做好的异常处理流程,
———————————————————————— 这句话其实自相矛盾,既然你都层层已经做好异常处理,就是说明该处理的你处理了,那么上访的本来就是你这个层次无能为力的。 |
|
返回顶楼 | |
发表时间:2011-03-20
资本主义是市场经济但不是自由经济,该干预一样会强制干预,有些约束你一样必须遵守
—————————————————————— 历史大量的时期处在严格的等级制度中,今天虽然不能说完全的自由市场经济(如同奥地利经济学派描述的那样),但是整个地球大多数地方都在进入市场经济,但是历史近几百年的发展远远超越前面千年万年的历史。这说明越复杂的系统采用越严格的自顶向下管制机制必然无法应对,极其落后。 从软件开发方法学上来说,瀑布模型的落后也是可见一斑。 |
|
返回顶楼 | |