java ArrayList只添加一个元素

时间:2017-09-17 20:29:50

标签: java arraylist javafx

我正在创建一个JavaFXML应用程序,我需要在那里拥有这些类:ListOfAllEvents,Events和Instructors。 ListOfAllEvents有一个ArrayList of Events,每个Event都有一个ArrayList of Instructors。

现在,点击按钮并使用创建实例的方法我首先创建几个教师并将它们添加到ArrayList CurrentInstructors,然后我创建一个Event实例,为其分配教师列表然后我想添加我的ArrayList CurrentEvents的新事件。

我的问题是,CurrentEvents只添加一个事件,当我第二次调用创建新事件的方法时,第二个事件替换第一个事件,即使我的CurrentInstructors正常工作。

你能帮帮我吗?我是Java的初学者,所以我会感谢每一条建议。

我的代码:

 public class FXMLDocumentController implements Initializable {
(...)
 private ArrayList<Instructor> CurrentInstructors = new ArrayList<Instructor>();
private ArrayList<Event> CurrentEvents = new ArrayList<Event>();

@FXML
private void AddInstructor_Click(ActionEvent event) {
    TextInputDialog dialog = new TextInputDialog("");

    Optional<String> result = dialog.showAndWait();
    if (result.isPresent()){
        Instructor newInstructor = new Instructor(result.get());
        CurrentInstructors.add(newInstructor);

    }
}


private void NewEvent () {
Event newEvent = new Event(EventName.getText());

//this is the problematic row:
CurrentEvents.add(newEvent);

newEvent.setInstructors(CurrentInstructors);

CurrentInstructors.clear();

}
(...)
}

讲师班:

public class Instructor {
private String name;

public String getName() {
    return name;
}
public Instructor(String name){
    this.name = name;

}

}

活动类:

public class Event {
private String name;
private ArrayList<Instructor> Instructors = new ArrayList<Instructor>();

 public Event(String name){
    this.name = name;
}
//getters, setters

}

1 个答案:

答案 0 :(得分:2)

您只有一个要设置的列表,然后立即清空。

newEvent.setInstructors(CurrentInstructors);
CurrentInstructors.clear(); // This clears the list just set to newEvent

由于Java为pass-by-value,因此对单个List对象有多个引用

如果您希望每个新活动都拥有自己的列表,则需要明确制作new ArrayList<>()每个newEvent对象,然后添加 ,并调用{{ 1}}

例如,

setInstructors