我有一个方法,由于项目的规范必须返回一个int。
该方法是一个create()方法,它创建一个对象并将其放入一个数组中。 然后它返回放置对象的数组中的位置。
就在.......到目前为止很好。
当您尝试创建数组中已存在的对象时,问题就会开始。我的代码可以防止创建重复项。但它仍然需要返回一个int。
我应该为尚未创建的对象返回什么int?
-1?
空?
例外?
答案 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”更有意义)