异常捕获的切面--java需要优雅吗?

我是je的新人,大学刚毕业,入司后就一直在看别人的代码。
今天看到前人的两行注释让我思考——
……也许我所述不是问题for YOU,但是我迷茫
    public synchronized void putInCache(String cacheName, String key, Object value){
CacheExt cache= getCache(cacheName);
// if (cache == null) {
// throw new NeedsRefreshException("Cache is not exist");
// }
cache.putInCache(key, value);
}

为什么要注释掉呢?可能是作者认为调用它的代码过滤了cache为空的可能,例如:
   
public synchronized boolean hasCache(String cacheName) {
return cacheMap.getKeys().contains(cacheName);
}
……
if(hasCache(cacheName)) { putInCache(……);}
……

但下面:
    public synchronized Object getFromCache(String cacheName, String key){
CacheExt cache = getCache(cacheName);
if(cache == null)
return null;
try {
return cache.getFromCache(key);
} catch (NeedsRefreshException e) {
cache.cancelUpdate(key);
return null;
}
}

作者又在方法内部过滤这种异常,是作者的逻辑有问题吗?
当面对外部对本方法调用有多种可能性,而每种可能性的处理又个不相同时,就出现这样的问题:
本方法不能确定外部调用是否已经过滤了异常,而自己又很迫切的需要保证这一点时,你就得在自己内部过滤掉可能的异常。但是对于许多人来说:注意防止异常的发生是基本原则(至少老师是这么教我的——),所以对于一个充分解耦的程序来说多级的调用中,或者是分组开发里,出现这样的调用A-调用->B-调用->C-调用->D-调用->E-调用->F-调用->G的调用栈,G是最终的方法即本方法,内部有过滤,同样的A-调用->B有过滤,其他一样,既
if (cache == null) {
throw new NeedsRefreshException("Cache is not exist");
}

出现多次,判断N次(影响效率!?)。这样我看起来很不爽,这么麻烦!一点都不简约,不朴素。
当然,也可以不处理这样就简约了,朴素了-
待续……去看奥运会开幕式——

接续:
也就是说在类的外部和内部都不处理这种异常(有这样写代码的吗?),假设程序中不会出现异常;或者捕获这种异常的代价远远大于了重启的代价——

当然,这里依然还有一种方法,也就是整个系统的通用异常处理框架或机制。如此的话,在函数方法的内部和外部(不包含最外部)不用理睬过滤的事情了……

总结:当我们不确定异常发生的时机、异常处理的种类(也许有些异常出现后,可以使用默认参数代替,有些则报错崩溃)、异常处理代价时,就出现了异常处理的切面问题,也就是说在哪里会出现异常、哪里需要处理异常、如果处理异常的问题!
我认为有4种模式:
[color=darkred]
[list]
[*]原始社会模式——个体与个体之间社交的匮乏,可以忽略任何一个人的错误(对应不处理方式)
[/list]
[list]
[*]封建社会模式——个体在不经意见的错误会有官府等机制来纠正(对应方法外部过滤)
[/list]
[list]
[*]资本主义模式——当每个个体的意识和法制强度达到一定程度时,个体对外界是干净的(对应内部过滤)
[/list]
[list]
[*]社会主义模式——社会主义的每个公民都是优秀的,既是偶尔犯错,也会有社会主义的政府来处理(对应统一框架或机制处理)
[/list]
[/color]

如果是这样的话,我想Java代码在我们面前突然就变得优雅起来。
但在日益复杂的系统里,这可能实现吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值