有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

向集合添加元素的java方法总是引发自定义异常

好的,我有一个向列表中添加元素的方法,但是它总是抛出我的自定义异常,不管发生什么,即使我创建的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);
            }
        }
    });

共 (1) 个答案

  1. # 1 楼答案

    我不得不使用答案,因为它太长了,无法发表评论。 这在我看来是可疑的:

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

    也就是说createPLancreatePlan怎么了?复印及;粘贴错误?或者你是在两次调用同一个方法(这可以解释这种行为)