我正在创建一个 JavaFXML 应用程序,我需要在那里有这些类:ListOfAllEvents、Events 和 Instructors。 ListOfAllEvents 有一个 Events ArrayList,每个 Event 有一个 Instructors ArrayList。
现在,单击按钮并使用创建实例的方法,我首先创建几个讲师并将它们添加到 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();
}
(...)
}
导师类(class):
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
}
最佳答案
您只有一个正在设置的列表,然后立即清空。
newEvent.setInstructors(CurrentInstructors);
CurrentInstructors.clear(); // This clears the list just set to newEvent
由于 Java 是 pass-by-value ,您对单个 List 对象有多个引用
如果您希望每个新事件都拥有自己的列表,则需要显式创建 new ArrayList<>()
每个newEvent
创建对象,然后添加到 that,并调用 setInstructors
例如,
private void newEvent(String name) {
Event newEvent = new Event(name);
// Copy the list
List<Instructor> instructors = new ArrayList<>(currentInstructors);
// Set that list
newEvent.setInstructors(instructors);
currentEvents.add(newEvent);
// Now clearing this list won't clear the newEvent list
currentInstructors.clear();
}
关于java ArrayList只添加一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268594/