簡體   English   中英

向后傳播異常,並繼續執行Java中的執行流程

[英]Propagating the exception back and continue with the execution flow in java

我有一個正在處理軟件包列表的場景。 在此軟件包列表中,有一些有效的軟件包和一些無效的軟件包。當前我正在做的是查找無效的軟件包並將其包裝在異常中並將其扔回。 但是在這種情況下,我無法弄清楚如何繼續進行有效的包裝流程。 無論如何,我可以將異常傳播回我可以對其進行處理的地方,同時繼續使用有效的軟件包進行處理。 是否可以使用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);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM