我应该避免在我的java函数中返回null吗?

时间:2017-10-25 09:49:09

标签: java null

我没有为我的问题找到合适的解决方案。据我所知,返回null并不是编写干净代码的好方法,正如本书Clean Code所述。但是对于这种做法有很多不同的看法,我不确定哪一种适合我的功能。

private EArea getSimilarExistingArea(EImportArea importedArea) {
    for (EArea existingArea : exsitingAreas) {
        EList<EPoint> importedAreaPoints = importedArea.getPoly().getPoints();
        EList<EPoint> existingAreaPoints = existingArea.getPoly().getPoints();
        for (EPoint importedAreaPoint : importedAreaPoints) {
            for (EPoint existingAreaPoint : existingAreaPoints) {
                if (importedAreaPoint.equals(existingAreaPoint))
                    return existingArea;
            }
        }
    }
    return null;
}

如果没有现有的类似区域,我应该返回什么?

PD:为了优化我的代码,如果建立现有区域,我将使用返回来打破循环。

2 个答案:

答案 0 :(得分:4)

你应该看看Optional class

让您的方法返回Optional<EArea>类型,只需返回Optional.ofNullable(existingArea)您将需要稍微修改您的代码,但Optional的好处非常值得!

答案 1 :(得分:0)

最后我使用Optional Class来解决我的问题。

以下是代码:

private Optional<EArea> getSimilarExistingArea(EImportArea importedArea) {
    for (EArea existingArea : baseLineService.getBaseLine().getAreas()) {
        EList<EPoint> importedAreaPoints = importedArea.getPoly().getPoints();
        EList<EPoint> existingAreaPoints = existingArea.getPoly().getPoints();
        for (EPoint importedAreaPoint : importedAreaPoints) {
            for (EPoint existingAreaPoint : existingAreaPoints) {
                if (importedAreaPoint.equals(existingAreaPoint))
                    return Optional.of(existingArea);
            }
        }
    }
    return Optional.empty();
}

以下是我检查返回值的方法:

if (getSimilarExistingArea(importedArea).isPresent())