我的容器类中有rs.getTimestamp(4), rs.getTimestamp(5)
方法。
如果我没有long get(int key)
值匹配,该怎么办?
抛出异常?还有别的吗?
答案 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)
您应该做适合您容器使用情况的任何事情:
在任何情况下,都要为容器类和明确定义合同的方法编写好的文档。
答案 3 :(得分:0)
答案 4 :(得分:0)
取决于申请 - 我会说。我将尝试在上面的帖子中确保您的两个查询。
我会为您的第一个查询返回 Long.MIN_VALUE ,为第二个查询返回 null 。
返回null
并不是那么糟糕 - 请阅读下面的说明以解释我的选择。
根据经验,每当您开发调用其他类和方法的类和方法时;您应该根据逻辑在调用方法后处理它们的方式来定义预期的契约(参数和返回值)。
在这种情况下,如果方法必须返回 long ,并且您没有任何要返回的内容,则返回Long.MIN_VALUE。这样,您就可以将应用程序与负数作为有效返回值的情况隔离开来 - 很少有程序可以处理Long.MIN_VALUE。
来到第二个问题 - 当地图中没有钥匙时应该返回什么。那么Java SDK就会显示出来:返回null将是你最好的选择。这会强制您在处理代码之前检查get()方法的有效返回值。假设你没有捕获NullPointerException,这也会导致你的应用程序肯定崩溃,以防你错过这样的检查 - 一个很好的快速失败实现,可以帮助你识别丢失的链接。