b***i 发帖数: 3043 | 1 还是那个项目,现在我看里面的结构,有一个函数
play(...){
try {
... call(); //这是定义在一个抽象类的函数,众多子类实现该定义
} catch(MyError my){
...
}
}
然后,在某些子类的call里面,我没有看到throws声明。
我把自己定义的一个call里面加入了Thread.sleep,目的就是如果interrupt了,就把线
程退出。发现eclipse说需要throws InterruptedException, 或者要自己catch。那么
为什么在众多的子类的call函数里面,MyError没有catch,也没有throws声明,只需要
在最外围的play那里catch?
我按照eclipse的提示,一步一步增加throws,结果已经增加了十几个了,不敢继续改
,因为改太多了。为什么原来的MyError不用这么做呢?我是不是需要被
InterruptedException截获,然后放在MyError里面,在play里面一起处理?我这样处
理,线程如果被中断,是可以退出的。我的目的就是如果我中断一个线程,就在play那
里处理InterrupteException
另外一个方案是,在我那个自己定义的call里面改变一个ThreadLocal的变量,然后在
play里面查询。play里面是循环处理,所以如果处理完一件事情,可以查询这个变量。
缺点是会增加开销 |
w**z 发帖数: 8232 | 2 看看Java runtime exception.
【在 b***i 的大作中提到】 : 还是那个项目,现在我看里面的结构,有一个函数 : play(...){ : try { : ... call(); //这是定义在一个抽象类的函数,众多子类实现该定义 : : } catch(MyError my){ : ... : } : } : 然后,在某些子类的call里面,我没有看到throws声明。
|
j******l 发帖数: 10445 | 3 不清楚就和tech lead咨询。每个公司每个项目技术方面的要求不一样。
in general, 如果是需要user知道出错了,就包装成user friendly exception
message往外扔,如果不需要用户知道,那就catch and continue 或者 catch and
stop.
参考existing code in your application. |
b***s 发帖数: 117 | 4 有可能catch之后,throw的不是原来的那个exception了
而是一个打包的runtime exception,就不用catch了
比如是这样:
class MyException extends RuntimeException {...}
try{
...
} catch (InterruptedException ie) {
...
throw new MyException(message); //unchecked exception
}
【在 b***i 的大作中提到】 : 还是那个项目,现在我看里面的结构,有一个函数 : play(...){ : try { : ... call(); //这是定义在一个抽象类的函数,众多子类实现该定义 : : } catch(MyError my){ : ... : } : } : 然后,在某些子类的call里面,我没有看到throws声明。
|
b***i 发帖数: 3043 | 5 好像是checked exception和unchecked的区别。
网上有人问,这个InterruptedException为啥要check。那我就截获然后throw MyError
,里面增加一个boolean表示是线程中断就行了。
【在 w**z 的大作中提到】 : 看看Java runtime exception.
|
b***s 发帖数: 117 | 6 RuntimeException以下的,都是unchecked的
MyError
【在 b***i 的大作中提到】 : 好像是checked exception和unchecked的区别。 : 网上有人问,这个InterruptedException为啥要check。那我就截获然后throw MyError : ,里面增加一个boolean表示是线程中断就行了。
|
m*********a 发帖数: 3299 | 7 估计MyError 是run time exception.是unchecked.
你过你添加的call中加了interrupted exception,可以re-throw
youcall()
{
try{}
catch (InterruptedExcetpion e){
MyError myerror = new MyError();
myerror.setSource(e);
throw myerror;
}
}
}
【在 b***i 的大作中提到】 : 还是那个项目,现在我看里面的结构,有一个函数 : play(...){ : try { : ... call(); //这是定义在一个抽象类的函数,众多子类实现该定义 : : } catch(MyError my){ : ... : } : } : 然后,在某些子类的call里面,我没有看到throws声明。
|
F****n 发帖数: 3271 | 8 Error和RuntimeException不用catch |