在java中传播异常并继续执行流

在java中传播异常并继续执行流,java,exception,exception-handling,Java,Exception,Exception Handling,我有一个场景,其中我正在处理一个包列表。在这个包列表中有一些有效包和一些无效包。目前我正在做的是查找无效包并将其包装在异常中并将其抛出。但在这种情况下,我无法弄清楚如何继续有效包的流动。 无论如何,我都可以将异常传播回我可以处理它的地方,同时继续处理有效的包。是否可以使用java实现它?在这种情况下,您可能不应该使用异常,因为无效包是一种预期情况,而不是异常情况。我只需要使用一个返回值。但是,如果您真的想保持这种状态,也可以使用以下技术,但有一个例外: /** * processes all

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

在这种情况下,您可能不应该使用异常,因为无效包是一种预期情况,而不是异常情况。我只需要使用一个返回值。但是,如果您真的想保持这种状态,也可以使用以下技术,但有一个例外:

/**
 * 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);
        }
    }
}