我有方法x
调用其中的另一个名为y
的方法,该方法抛出异常MyException
。目前我有两个选项,要么宣传我的方法x
,例外MyException
...就像
public void x() throws MyException {
// call to y
}
(因为y
通过throws
子句广告,如此...)
public void y() throws MyException {
// code
}
或者在try catch块的方法y
中将调用包装到x
并处理它?喜欢这个..
public void x() {
try {
// call to y
} catch (MyException e) {
// handle exception
}
}
拇指规则是什么?
答案 0 :(得分:1)
如果您的方法可以保持与其调用者的契约,无论异常如何,那么异常就可以并且可能应该处理。
如果调用者感到困惑,发现他们说“做x”,并且“y”部分的内部问题是“x”,因为“x”没有真正完成,那么你应该暴露异常(或其他一些以MyException
为原因的异常。)
并且 - 考虑调用者是否可以合理地处理异常,或者是否有任何理由继续该程序,如果答案为否,请考虑使用RuntimeException
或Error
,分别
无论如何,这就是我要说的。
答案 1 :(得分:1)
答案很简单:
如果你可以处理内部异常,你应该抓住它并做一些合理的事情
如果你不可以处理它,你有两个选择:
以下是每种类型的一些示例:
public void deleteFile(String filename) {
File file = new File(filename);
try {
file.delete();
} catch (FileNotFoundException e) {
// No big deal - it was already deleted
}
}
public void changePassword(String username, String password) throws UserUpdateException {
try {
// execute SQL to update the password
// but storing the user in a DB is an imlementation choice
// we could use a file on disk or a remote web service to store user info
} catch (SQLException e) {
throw new UserUpdateException(e);
}
}
public void insertIntoDatabase(Record record) throws SQLException {
// execute SQL on the database
// using a DB is implied - let the exception bubble up
}