2

好的,所以我有一个方法可以将元素添加到列表中,但无论如何它总是抛出我的自定义异常,即使Set我创建的元素中没有元素。

private Set<Plan> planSet = new HashSet<Plan>();
public Plan createPlan(String name) throws DuplicatePlan{
    Plan plan = new Plan(name);


    if(!planSet.contains(plan)){
        planSet.add(plan);
    } else {
        throw(new DuplicatePlan("Error, duplicate plan"));
    }

    return plan;
}

我在想我的方法equals()hashCode()方法导致了这种情况。目前我正在使用默认覆盖的 Eclipse hashCode()equals()这就是我所拥有的:

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj){
        return true;
    } if (obj == null){
        return false;
    } if (getClass() != obj.getClass()){
        return false;
            }
    Plan other = (Plan) obj;
    if (name == null) {
        if (other.name != null){
            return false;
                    }
    } else if (!name.equals(other.name)){
        return false;
            }
    return true;
}

这是做什么Plan的:

private String name;
private Set<Tables> tablesSet;


public Plan(String name){
    this.name = name ;
}

如果用户在 TextField 中设置了相同的名称,以下是应该发生的情况:

newPlan.setOnAction(new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent action){
            if(!newPlan.getText().isEmpty()){
                try {
                    String name = planName.getText();
                    plan.createPLan(name);
                    esquema =             esquemas.createPlan(planName.getText());
                    optionsPlans.getItems().add(plan.getName());
                } catch (DuplicatePlan e) {
                    dialog.errorDialog(planError, duplicate);
                }
            } else {
                dialog.errorDialog(empty, emptySpace);
            }
        }
    });
4

1 回答 1

1

不得不使用答案,因为评论太长了。这对我来说看起来很可疑:

String name = planName.getText();
plan.createPLan(name);
esquema = esquemas.createPlan(planName.getText());

createPLan和怎么了createPlan?复制粘贴错误?还是您两次调用相同的方法(这可以解释这种行为)?

于 2013-10-23T21:50:18.403 回答