对于不执行操作的“int create()”方法应该返回什么值?

时间:2014-01-23 02:18:40

标签: java

我有一个方法,由于项目的规范必须返回一个int。

该方法是一个create()方法,它创建一个对象并将其放入一个数组中。 然后它返回放置对象的数组中的位置。

就在.......到目前为止很好。

当您尝试创建数组中已存在的对象时,问题就会开始。我的代码可以防止创建重复项。但它仍然需要返回一个int。

我应该为尚未创建的对象返回什么int?

-1?

空?

例外?

4 个答案:

答案 0 :(得分:3)

另一个替代方法是返回现有项目的ID - 毕竟,不是什么决定了"重复"?

由于此代码必须在现有的"规范"内工作,因此像-1(或抛出异常)这样的值可能执行更多(或更少)的操作来破坏该基础结构返回现有元素的id。

无论哪种情况,请务必记录行为和集成 - 测试实施。

答案 1 :(得分:1)

这是您的设计选择。一般来说,你给出的所有三个答案都是有效的,但标准方法是使用-1。

要使用null,您必须返回Integer而不是int,效率会降低。

-1永远不是数组的有效索引,因此没有理由不使用它 - 这就是像String.indexOf这样的所有库函数都使用的。

答案 2 :(得分:1)

首先,如果你必须返回int,那么尝试运行将是一个编译错误(null表示对象,int是主要的,因此不是对象)。

这给我们留下了两个选项,两者都没有隐含地好于另一个:

抛出异常

这很好,只要添加一个存在的对象是“异常”行为,毕竟它是一个例外。

返回-1

这可能是首选方案,因为根据我的理解,添加已存在的项目并不构成例外行为,而是这是预期的。因为-1是一个永远不会返回的值,否则就足够了。


请记住,其中任何一个都可以,只要它完全指定会发生什么并且你是一致的(没有一个方法抛出而另一个方法在出错时返回-1)并坚持你的设计选择< / p>

作为旁注,值得一提的是像java.util.Set这样的接口,它们定义了两个方法,一个在尝试添加重复时返回false,另一个抛出异常。

答案 3 :(得分:0)

是否根据create()方法的参数创建对象?如果是这样,抛出IllegalArgumentException来指示。 (这比简单地获得“-1”更有意义)