当前位置: 首页 > 知识库问答 >
问题:

尝试块返回是好的做法吗?

单于善
2023-03-14

我很好奇在try块中使用return语句的最佳实践。

我有一个调用服务方法的方法,该方法返回一个整数,并可能抛出一个IllegalArgumentException。有两种方法可以做到这一点。

第一:

public int getLookupStatus(String lookupType)
{
    try
    {
        return this.lookupService.getCountOfLookupRecords(lookupType);
    }
    catch(IllegalArgumentException ex)
    {
        throw new RestException();
    }
}

第二:

public int getLookupStatus(String lookupType)
{
    int count;

    try
    {
        count = this.lookupService.getCountOfLookupRecords(lookupType);
    }
    catch(IllegalArgumentException ex)
    {
        throw new RestException();
    }

    return count;
}

在第二种方法中,计数变量似乎是不必要的,但出于某种原因,第一种方法在我看来是错误的。有什么特别的理由偏袒一方而不是另一方吗?

共有3个答案

严峰
2023-03-14

这两种方法产生相同的结果,在这两种情况下,如果没有错误或异常将被抛出,将返回一个值。

但就个人而言,我更喜欢第一个,更容易阅读。

厉钊
2023-03-14

我喜欢第一个版本,因为它看起来更可读。此外,如果引发了异常,那么这无关紧要,因为控件无论如何都会退出该方法。

我使用第二种模式的唯一原因是,如果我想在返回返回值之前对其进行处理。

另一方面,如果不处理IllegalArgumentException,代码可能会更好。在调用方法之前,应该有一种方法让您验证参数。

慕志泽
2023-03-14

try块中返回值没有问题,如果引发了illegargumentexception(或任何其他RuntimeException),您甚至不会从该方法返回任何内容,程序的正常执行流将因该异常而改变。

第二个例子中的模式用于catch块中使用/实例化的资源需要关闭的情况,然后在finally子句中正确处理这个问题。

 类似资料:
  • 我有这段代码来计算一些文本的宽度: 当try块返回一些东西时,最后在内部进行清理是不是很糟糕的做法?它按预期工作;这个问题不是关于如何工作的,我得到了那部分。我只是想知道,出于某种原因,将宽度存储在变量中,进行清理,然后返回变量是否会更好?

  • 假设我有一个类来为游戏中的一个项目建模,如下所示: (假设正确重写的和以比较内部枚举) 现在我想要一种方法来用中的getter来区分这些项:我应该返回还是名称?一般情况下返回是好的做法吗?或者是否有更好的方法来区分这些s?因为返回枚举类似于向我公开rep,而且我不希望我的同事直接使用来比较的 我想到的办法如下: 执行类似; 要执行; ; 要执行; 我不知道该怎么做,我希望有经验的程序员能给我一些启

  • 问题内容: 我正在尝试为博客平台创建一个构造函数,并且内部进行了许多异步操作。这些范围包括从目录中获取帖子,对其进行解析,通过模板引擎发送它们,等等。 所以我的问题是,让我的构造函数返回一个promise而不是调用它们的函数的对象是不明智的。 例如: 现在,用户可能 还不 提供补充的Promise链接: 这可能会带来问题,因为用户可能会感到困惑,为什么 在构造后仍然无法使用。 在构造函数中使用Pr

  • 问题内容: 我正在尝试为博客平台创建一个构造函数,并且其中包含许多异步操作。这些范围包括从目录中获取帖子,对其进行解析,通过模板引擎发送它们,等等。 所以我的问题是,让我的构造函数返回一个promise而不是调用它们的函数的对象是不明智的。 例如: 现在,用户可能 还不 提供补充的Promise链接: 这可能会带来问题,因为用户可能会感到困惑,为什么 在构造后仍然无法使用。 在构造函数中使用Pro

  • 问题内容: 过去,我使用以下方法读取大量代码: 这样做是惯例吗? 优点和缺点是什么? 在我看来,这就像完成异常的“ Agent Orange”方式 编辑 处理方法中的预期异常 引发意外异常(一对一) 不在乎错误 那是路要走吗? 问题答案: 你不应该扔。这就是为什么。 Throwable是可抛出的事物层次结构的顶部,由and组成。由于根据定义是由不可挽救的条件引起的,因此将它们包括在方法声明中是没有

  • 问题内容: 我们已经从软件供应商处收到Java代码。它包含许多没有任何部分的块。他们到处都是。例: 我的问题是:以上做法是否可以接受?如果是这样,什么时候?还是我应该继续删除所有这些“虚假” 和陈述? 对我来说,这看起来像是可怕的练习,但是我对Java的经验不足以肯定。如果您不打算对它们做任何事情,为什么会发现它们呢?在我看来,仅当您确信例外绝对不会有后果并且您不在乎是否发生例外时,您才这样做。但