我有一个场景,我正在处理一个包列表。在这个包列表中有一些有效的包,有些是无效的包。目前我正在做的是找到无效的包并将其包装在异常中并将其丢回。但在这种情况下,我无法弄清楚如何继续有效的包流。 无论如何,我可以将异常传播回我可以处理的地方,同时继续处理有效的包。是否可以使用java实现它?
答案 0 :(得分:2)
在这种情况下,您可能不应该使用异常,因为无效的包是预期的情况,而不是例外情况。我只想使用返回值。但是如果你真的想保持这种方式,下面的技术也可以用作例外:
/**
* 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;
}
改为例外:
/**
* 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);
}
}
}