在try块中返回是一种好习惯吗?

时间:2013-04-03 16:26:53

标签: java

我很想知道在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;
}

在第二种方法中,计数变量似乎没必要,但出于某种原因,第一种方法对我来说似乎不对。是否有任何特别的理由支持一方而不是另一方?

5 个答案:

答案 0 :(得分:1)

try块中返回值没有错,如果IllegalArgumentException被引发(或任何其他RuntimeException)你甚至不能从该方法返回任何内容,正常执行由于该例程,程序的流程将会改变。

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

答案 1 :(得分:0)

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

我使用第二种模式的唯一原因是,如果我想在返回之前对返回值执行某些操作。

另外请注意,如果没有处理IllegalArgumentException,您的代码可能会更好。应该有一种方法可以在调用方法之前验证参数

答案 2 :(得分:0)

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

但是persnnaly我更喜欢第一个,更容易阅读。

答案 3 :(得分:0)

你应该避免使用finally子句中的return。通常,两个块都应声明退出。如果在尝试你有回报你应该也有它在捕获,在你的情况下第二次返回被throw替换。

我也会先使用snipest,因为它更具可读性。

答案 4 :(得分:0)

两种方法最终都是一样的。您不能抛出异常以及从方法返回值。这两件事永远不会发生在一起。您可以返回一些值或抛出异常。

在第二种方法中,返回计数; 语句是必需的,否则编译器将抛出错误消息。这是因为,如果您的代码没有遇到任何异常,则必须根据您的方法原型返回值。

两个apprroach是相同的,除了第一个直接返回值,而第二个将它存储在一个变量中并返回变量的值,该变量最终与第一个相同。

还有一件事,你没有在方法定义中声明和抛出子句,这表明 RestException()是一个未经检查的异常。一般来说,这不是一个好习惯。抛出未经检查的异常,因为调用方法可能无法处理它。 我建议你改为抛出一个检查过的异常。