java ArrayList只添加一个元素

标签 java arraylist javafx

我正在创建一个 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/

相关文章:

java - 导出项目到jar时出现"java.lang.IllegalStateException: Toolkit not initialized"

JavaFX - 如何在不扩展应用程序的 Controller 类中添加样式表?

java - java中具体的树数据结构

java - 使用 ArrayList 中的数据填充 Android ListView 是将每个项目设置为与第一个项目相同

java - 在 JavaFX 客户端中播放 h265 HEVC

java - 读取/过滤文本文件的最快方法是什么

java - 将 Arraylist<Object> 中的值转换为 byte[]

java - CentOS 7 上的 Tomcat 8 管理器访问被拒绝(错误 403)而不提示输入登录名/密码

Graph 的 Java 代码及其需求

Java 嵌入式比较器类