向集合添加元素的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 楼答案
我不得不使用答案,因为它太长了,无法发表评论。 这在我看来是可疑的:
也就是说
createPLan
和createPlan
怎么了?复印及;粘贴错误?或者你是在两次调用同一个方法(这可以解释这种行为)