怎么办,如果没有回报。 Java的

时间:2015-05-28 15:34:20

标签: java exception return

我的容器类中有rs.getTimestamp(4), rs.getTimestamp(5)方法。

如果我没有long get(int key)值匹配,该怎么办?

抛出异常?还有别的吗?

5 个答案:

答案 0 :(得分:3)

我建议抛出一个异常,它会从签名中清楚地描述你的方法。如果找不到匹配项,我不会建议返回null或返回-1,因为该方法的行为不会从其签名中反映出来。谁将要使用该方法需要记住或需要记录的地方,如果没有找到匹配,那么它将返回null或-1,并且在客户端代码中他们需要处理条件。但是通过抛出异常,您正在记录方法签名本身的行为。并且在客户端代码中,他们必须处理该方法抛出异常。

答案 1 :(得分:1)

您甚至不必在容器类中处理它。在控制器类或调用该方法的类中处理它。如果你真的想要,如果什么都没有回来,只需返回-1。 编辑:如果-1是有效值,则选择一个非有效值的值作为返回值。我的偏好是避免使用NULL。

实施例

if ( get(tempKey) == -1 )
    //you know it isn't a match, do something with it, throw exception...etc.

答案 2 :(得分:1)

您应该做适合您容器使用情况的任何事情:

  1. 如果使用缺席索引调用容器可能是错误的 在调用客户端代码中,那么你应该抛出异常。
  2. 如果使用缺席密钥调用此方法很常见,而不是 表示错误,然后可能客户端代码需要一些默认值 缺少明确设定值时的值。所以你应该回来 这个值。
  3. 如果您想明确声明没有价值 对于此密钥,并期望客户端代码正确处理此问题, 然后将返回类型更改为Long并返回null。
  4. 在任何情况下,都要为容器类和明确定义合同的方法编写好的文档。

答案 3 :(得分:0)

这将取决于它可以返回什么。如果它永远不能返回-1那么你可以返回-1(这通常用于这种事情)。

如果它可以返回-1,那么你可以抛出异常。

您也可以使用Long类返回null,但抛出异常应该更好。

答案 4 :(得分:0)

取决于申请 - 我会说。我将尝试在上面的帖子中确保您的两个查询。

我会为您的第一个查询返回 Long.MIN_VALUE ,为第二个查询返回 null

返回null并不是那么糟糕 - 请阅读下面的说明以解释我的选择。

根据经验,每当您开发调用其他类和方法的类和方法时;您应该根据逻辑在调用方法后处理它们的方式来定义预期的契约(参数和返回值)。

在这种情况下,如果方法必须返回 long ,并且您没有任何要返回的内容,则返回Long.MIN_VALUE。这样,您就可以将应用程序与负数作为有效返回值的情况隔离开来 - 很少有程序可以处理Long.MIN_VALUE。

来到第二个问题 - 当地图中没有钥匙时应该返回什么。那么Java SDK就会显示出来:返回null将是你最好的选择。这会强制您在处理代码之前检查get()方法的有效返回值。假设你没有捕获NullPointerException,这也会导致你的应用程序肯定崩溃,以防你错过这样的检查 - 一个很好的快速失败实现,可以帮助你识别丢失的链接。