- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
遇到这样的情况 - 在 main 方法中,调用了一个子方法,该子方法检查对象,并且在该子方法中抛出异常(列表中的对象之一为 NULL)。但是main方法的代码还是继续执行!示例代码:
@Transactional
public boolean addCompany(List<Company> companies, List<Address> addresses) throws Exception{
checkAddress(addresses);
try{
for(int i = 0; i < companies.size(); i++){
if(findCompany(companies.get(i).getId()) == null && !isExistsCompany(companies.get(i))){
companies.get(i).setAddress(addresses.get(i));
this.em.persist(companies.get(i));
}
}
}catch(Exception e){
return false;
}
return true;
}
public void checkAddress(List<Address> addresses) throws Exception{
try{
if(addresses == null)
throw new Exception(Thread.currentThread().getStackTrace()[2].getClassName() + "." + Thread.currentThread().getStackTrace()[2].getMethodName() + "." + Thread.currentThread().getStackTrace()[1].getMethodName() + ": Invalid parameter: list is null");
for(Address a : addresses)
if(a == null)
throw new Exception(Thread.currentThread().getStackTrace()[2].getClassName() + "." + Thread.currentThread().getStackTrace()[2].getMethodName() + "." + Thread.currentThread().getStackTrace()[1].getMethodName() + ": Invalid list item: object is null");
}catch(Exception e){
e.printStackTrace();
}
}
在这方面,出现了几个问题:- 为什么代码不停止?- 现在是否有必要通过将 checkAddress 方法的类型从 void 更改为 boolean 并在 main 方法中处理 true/false 来摆脱这种情况?- 如何在前端正确处理此类错误 - 文本是否将异常发送到前端或仅处理代码 500,如果是这样,那么为什么在后端生成异常 - 以帮助开发过程?如何妥善应对?请指教。提前致谢。
最佳答案
您正在捕获异常
,当您不重新抛出异常
时,Java 运行时会认为它已被处理。如果您希望程序执行停止,那么您需要将异常
传播给调用者。例如,在 checkAddress
中更改
} catch(Exception e) {
e.printStackTrace();
}
类似于
} catch(Exception e) {
e.printStackTrace();
throw e; // <-- re-throw the Exception
}
或者只需完全删除try
和catch
,然后Exception
就会自动抛出给调用者。此外,在 Java 8+ 中,您可以使用 Stream
。就像,
public void checkAddress(List<Address> addresses) throws Exception {
if (addresses == null) {
StackTraceElement[] ste = Thread.currentThread().getStackTrace();
throw new Exception(ste[2].getClassName() + "."
+ ste[2].getMethodName() + "." + ste[1].getMethodName()
+ ": Invalid parameter: list is null");
}
if (addresses.stream().anyMatch(a -> a == null)) {
StackTraceElement[] ste = Thread.currentThread().getStackTrace();
throw new Exception(ste[2].getClassName() + "."
+ ste[2].getMethodName() + "." + ste[1].getMethodName()
+ ": Invalid list item: object is null");
}
}
关于java - 抛出异常 - 并且代码进一步执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45777441/
我有这个: const {ops} = getOplogStreamInterpreter(strm); ops.del.subscribe(v => { console.log('delete
我四处搜索,据我所知,POST 表单请求已被限制为 10MB (http://golang.org/src/net/http/request.go#L721)。 如果我要在我的 ServeHTTP 方
我是一名优秀的程序员,十分优秀!