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

4

我没有找到适合我的问题的解决方案。据我所知,返回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;
}

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

附注:为了优化我的代码,如果找到现有区域,我将使用 return 中断循环。


{btsdaf} - Lokesh Pandey
1
{btsdaf} - AxelH
2
{btsdaf} - d.j.brown
1
对于私有方法,如果你已经在自己的类中处理了它,那么返回任何内容都由你决定。对于公共方法,你应该说明可能返回的值,包括 null,并给出原因,这样就可以了。 - Alex
{btsdaf} - bric3
{btsdaf} - bric3
2个回答

5
你应该看一下Optional类!将你的方法返回类型改为Optional<EArea>,并简单地返回Optional.ofNullable(existingArea),你需要稍微修改代码,但使用Optional带来的好处真的很值得!

1
{btsdaf} - Joop Eggen
1
{btsdaf} - Shubhendu Pramanik
1
{btsdaf} - Dinh
1
{btsdaf} - Joop Eggen
{btsdaf} - Alex Blasco

1
最后我使用了 可选类 来解决我的问题。
以下是代码:
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())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接