На данный момент у меня есть класс "Test" с observableList объектов "Question" и ArrayList объектов "Question".
Каждый объект имеет следующие атрибуты: - private String question;частные заявления ArrayList;частная строковая категория;private String feedback;
Когда я добавляю новый объект Question в списки.Мои старые объекты (которые уже есть в списке) меняются.Атрибуты ArrayList атрибутов становятся значением последних добавленных операторов object-ArrayList
Сначала я подумал, что метод .add из observableList имеет какую-то особую функцию, поэтому я добавил 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;
}
}
OUTPUT:
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.