java - 将对象添加到 ArrayList 时,已在列表中的具有 ArrayList 作为属性的其他对象被修改?
问题描述
目前,我有一个类“Test”,其中包含一个 observableList 的“Question”对象和一个 ArrayList 的“Question”对象。
每个对象都有以下属性: - 私有字符串问题;私有 ArrayList 语句;私有字符串类别;私人字符串反馈;
当我向列表中添加一个新的问题对象时。我的旧对象(已经在列表中)被更改。属性 ArrayList statements 成为最后添加 object-ArrayList statements 的值
首先我认为 observableList 的 .add 方法有一些特殊的功能,这就是为什么我添加了一个 arrayList 但它没有改变任何东西。
我做了一些'system.out.println'来显示问题。
班级测试:
package model;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.util.ArrayList;
public class Test {
private ObservableList<Category> categories;
private ObservableList<Question> questions;
private ArrayList<Question> questionArray;
public Test () {
categories = FXCollections.observableArrayList();
questions = FXCollections.observableArrayList();
questionArray = new ArrayList<>();
}
public ObservableList<Category> getCategories(){
return categories;
}
public ObservableList<Question> getQuestions() {
return questions;
}
public void addCategory(Category category){
categories.add(category);
}
public void addQuestion(Question question){
questions.add(question);
}
public void makeCategories(ArrayList<String> elementen) {
try {
for (int i = 0; i < elementen.size(); i += 3) {
String naam = elementen.get(i);
String description = elementen.get(i + 1);
String hoofdCategorie = elementen.get(i + 2);
Category category = null;
if (hoofdCategorie.equals("null")) {
category = new Category(naam, description);
} else {
category = new Category(naam, description, hoofdCategorie);
}
categories.add(category);
}
} catch (Exception e) {
throw new ModelException("Categorie aanmaken is niet gelukt");
}
}
public void makeQuestions(ArrayList<String> primitieveQuestions) {
ArrayList <String> statements = new ArrayList();
for (int i = 0; i < primitieveQuestions.size();i+=4) {
String question = primitieveQuestions.get(i);
String category = primitieveQuestions.get(i+1);
String feedback = primitieveQuestions.get(i+2);
String primitieveStatements = primitieveQuestions.get(i+3);
statements.clear();
for (String woord:primitieveStatements.split("\\s",0)) {
statements.add(woord);
}
Question x = new Question(question, statements, category, feedback);
System.out.println("object");
System.out.println(x.toString());
questions.add(x);
questionArray.add(x);
// magic
System.out.println("observableList");
for (Question y : questions) {
System.out.println(y.toString());
}
System.out.println("array");
for (Question y : questionArray) {
System.out.println(y.toString());
}
System.out.println(" ");
}
}
}
课堂问题
package model;
import javafx.collections.ObservableList;
import java.util.ArrayList;
public class Question {
private String question;
private ArrayList<String> statements;
private String category;
private String feedback;
public Question (String question, ArrayList<String> statements, String category, String feedback ) {
setQuestion(question);
setStatements(statements);
setCategory(category);
setFeedback(feedback);
}
public Question (String question, ObservableList<String> statements, String category, String feedback ) {
setQuestion(question);
for (String x : statements) {
setStringStatements(x);
}
setCategory(category);
setFeedback(feedback);
}
//getters
public String getQuestion() {
return question;
}
public ArrayList<String> getStatements() {
return statements;
}
public String getCategory() {
return category;
}
public String getFeedback() {
return feedback;
}
//Setters
public void setQuestion(String question) {
this.question = question;
}
//setter van een meegegeven arrayList
public void setStatements(ArrayList<String> statements) {
this.statements = statements;
}
//setters als we een string aan onze lijst van statments willen toevoegen
public void setStringStatements(String statement) {
this.statements.add(statement);
}
public void setCategory(String category) {
this.category = category;
}
public void setFeedback(String feedback) {
this.feedback = feedback;
}
@Override
public String toString() {
return category + " " + statements;
}
}
输出:
object
Design Patterns [Strategy, Facade, Observer, State]
observableList
Design Patterns [Strategy, Facade, Observer, State]
array
Design Patterns [Strategy, Facade, Observer, State]
object
Design principles [Juist, Fout, fout, fout]
observableList
Design Patterns [Juist, Fout, fout, fout]
Design principles [Juist, Fout, fout, fout]
array
Design Patterns [Juist, Fout, fout, fout]
Design principles [Juist, Fout, fout, fout]
object
principe [ik, wordt, zot]
observableList
Design Patterns [ik, wordt, zot]
Design principles [ik, wordt, zot]
principe [ik, wordt, zot]
array
Design Patterns [ik, wordt, zot]
Design principles [ik, wordt, zot]
principe [ik, wordt, zot]
请注意列表中每个对象的 ArrayList 属性是如何改变的。它获取最后添加的对象的值他的 ArrayList-attribute。
解决方案
推荐阅读
- r - 通过在一个列中选择动态宽度中的第一个和最后一个非缺失值来计算公式,以填充宽度上的 NA
- r - 如何在 R 数据框中取消嵌套列表,同时保留键和值?
- asp.net - 如何在使用 asp.net core 和 mongodb 时从一对多关系表中获取数据
- javascript - 即使使用 webkit 前缀,剪辑路径也无法在 safari 上运行
- google-analytics - 谷歌分析重定向,呈现 2 页
- r - 如何在 R 中创建一个带有两条条和一条线的图形?
- android - 升级AS后,新资源无法反映编辑器的变化
- angular - SSL 与 Firebase 托管 - OVH 域
- mongodb - MongoDB:使用分页查询嵌套数组
- mysql - 首次插入时空列的 Sql 数据库设计