制作方法"什么都不做是一种好习惯。根据条件?

时间:2014-10-23 02:37:20

标签: java debugging coding-style

看看这个:

public class Main {

    private static List<Integer> list = new ArrayList<>();

    public static void add(int x) {
        if(list.contains(x)) {
            return;
        }
        list.add(x);
    }

    public static void main() {
        list.add(1);
        list.add(1); //should it do nothing or throw an error?
    }

}

此外,请忽略我可以使用Set<Integer>来消除对if(list.contains(x))的需求

无论如何,假设list不能有重复项,并且还假设在任何时候意外添加了副本(例如:第二个list.add(1))应该被视为错误;如果我不需要,我不想添加重复项。

底线是:add(int x)应该抛出异常(如IllegalArgumentException或其他什么)?我明白,如果我没有,我不需要担心它会导致涉及重复的实际错误,因为它在第二次添加时不会做任何事情,但它仍然困扰我一点,在某些时候是不必要的{可以调用{1}}。

我见过类似于add()的代码,它会检查某些东西,并且根据它不做任何事情。希望你可以将这个想法应用到你以前做过的事情上。

无论如何,我甚至都不知道。我是否应该像以后类似的问题一样继续上述类似问题,还是应该抛出异常呢?

2 个答案:

答案 0 :(得分:4)

两者都是,这取决于您想要达到的目标。对于集合,添加非唯一元素应该什么也不做,并且不是特殊情况。对于唯一元素的列表,添加非唯一元素可能是一种特殊情况,并且应该引发异常。 这不是编程的问题,而是建模的问题:你的对象认为是正常的,什么不是。没有一个“最好”的答案。

例如,如果您想跟踪哪些开发人员今天完成了任何工作,您可以将它们添加到worked集。如果开发人员今天做了另一次提交,并且你添加了他,他仍然只是“完成了工作”,这不是一个例外情况;只需返回而不更改列表。

但是,如果您正在处理就业记录并聘请开发人员,而他实际上已经在您的工作中,这是一种特殊情况,应该提出错误。

答案 1 :(得分:0)

这取决于您的要求。我做的方法总是有条不紊地做任何事情。但是,如果您的需求需要一些错误检测,则应该抛出异常。