根据条件使方法“什么都不做”是一个好习惯吗?

oct*_*pod 3 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?
    }

}
Run Code Online (Sandbox Code Playgroud)

另外,请忽略我本可以使用 aSet<Integer>来消除对if(list.contains(x))

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

底线是:应该add(int x)抛出一个异常(比如一个IllegalArgumentException或其他东西)?我知道如果我不这样做,我就不需要担心它会导致涉及重复的实际错误,因为它在第二次添加时不会做任何事情,但它仍然让我感到困扰,在某些时候不必要的add()可能叫做。

我见过类似于add(int x)检查某些内容的代码,但基于此不执行任何操作。希望你能把这个想法应用到你以前做过的事情上。

反正我也不知道。我应该在以后的类似问题中继续像上面一样,还是应该抛出异常?

Ama*_*dan 5

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

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

但是,如果您正在处理雇佣记录并在开发人员实际上已经在您受雇的情况下使用该开发人员,那么这是一种特殊情况,应该会引发错误。