2

我来自 C 世界,在那里我们使用“定义”来定义不同的返回值,从 C 函数返回的值,如下所示:

#define RETURN_SUCCESS 0
#define RETURN_ERROR -1

int myFunc()
{
    if(...) return(RETURN_SUCCESS);
    else if(...) return(RETURN_ERROR);            
}

这是如何在 Java 中以正确的方式完成的?

假设我有:

public MyObject findMyObject()
{
     MyObject tempObject = search();

     if( tempObject.type == myType ) 
     { 
        return tempObject;
     }
     else
     {
        return null; 
     }
}

可以退货null吗?

有没有更合适的方法呢?

4

3 回答 3

5

可以返回null。您会注意到在 Java API 中它有时会返回 null 或 -1 ,其中预期为 Int。另一个经常使用的选项是在出现问题时简单地抛出异常

大多数人和你现在可能问自己的问题往往是“好吧,我什么时候抛出异常,什么时候只返回 null?” 这个问题在这里得到了很好的回答。

于 2012-04-25T13:46:10.710 回答
4

在 Java 中使用返回码来指示错误是一种反模式。您应该改用异常。

如果错误是由于编程错误(无效参数、不正确状态)引起的,则抛出未经检查的异常实例。

当错误是因为环境出现问题(无法连接到服务器,找不到所需文件)时,抛出检查异常。

于 2012-04-25T13:47:04.003 回答
1

返回符合您定义的规范的东西总是可以的。因此,如果您在文档(javadoc 和测试)中定义哪些情况可能导致返回 null,那么您可以毫不费力地返回它。

您还必须了解,成为错误代码(如您的 C 代码)的人质并不是 Java 中的最佳策略。有些人甚至可能认为它是一种反模式。使用异常更为常见。鉴于您是 Java 新手,请考虑阅读http://docs.oracle.com/javase/tutorial/essential/exceptions/上的教程以获取更多信息。

于 2012-04-25T13:50:43.313 回答