gpt4 book ai didi

java - 将异常传播回来并继续 java 中的执行流程

转载 作者:行者123 更新时间:2023-12-02 05:33:51 25 4
gpt4 key购买 nike

我有一个正在处理包列表的场景。在此包列表中,有一些有效的包,有些是无效的包。目前我正在做的是查找无效的包并将其包装在异常中并将其扔回。但在这种情况下,我无法弄清楚如何继续有效包裹的流动。无论如何,我是否可以将异常传播回可以处理它的地方,同时继续使用有效包进行处理。可以用java实现吗?

最佳答案

在这种情况下,您可能不应该使用异常,因为无效的包是一种预期情况,而不是异常情况。我只想使用返回值。但如果您确实想保持这种方式,也可以使用以下技术(但有异常(exception)):

/**
* processes all the packages and returns the invalid ones
*/
public List<Package> processPackages() {
List<Package> invalidPackages = new ArrayList<>();
for (Package package: allPackages) {
if (isInvalid(package)) {
invalidPackages.add(package);
}
else {
processPackage(package);
}
}
return invalidPackages;
}

有一个异常(exception):

/**
* processes all the packages
* @throws InvalidPackagesFoundException if invalid packages were found. The thrown
* exception contains the invalid packages
*/
public void processPackages() throws InvalidPackagesFoundException{
List<Package> invalidPackages = new ArrayList<>();
for (Package package: allPackages) {
if (isInvalid(package)) {
invalidPackages.add(package);
}
else {
processPackage(package);
}
}
if (!invalidPackages.isEmpty()) {
throw new InvalidPackagesFoundException(invalidPackages);
}
}

如果目标是让调用者在发现无效包后立即对其进行处理,那么您可以向您的方法传递一个额外的回调参数:

/**
* processes all the packages. Each invalid package found is sent to the given
* invalid package handler.
*/
public void processPackages(InvalidPackageHandler invalidPackageHandler) {
for (Package package: allPackages) {
if (isInvalid(package)) {
invalidPackageHandler.handle(package);
}
else {
processPackage(package);
}
}
}

关于java - 将异常传播回来并继续 java 中的执行流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25229717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com