ich eine Variable public static List<Integer> allBooksIDs
haben, die global definiert und in einem Konstruktor initialisiert als allBooksIDs = dbFunctions.getAllBookIDs();
Größe der globalen Variablen unterscheidet sich von Größe der Rückgabeliste
Das Problem ist, dass, wenn ich überprüfen Sie die Größe der Liste allBooks
, die Wert ist 28, aber wenn ich überprüfe die Größe der Liste von dbFunctions.getAllBookIDs()
Methode zurückgegeben - es ist 57. Gibt es irgendetwas, was ich falsch mache?
getAllBookIDs()
public List<Integer> getAllBookIDs(){
List<Book> allBooks = getAllBooks();
List<Integer> res = new ArrayList<>();
for (Book b : allBooks){
res.add(b.getId());
}
return res;
}
private List<Book> getAllBooks() {
Query query = manager.createQuery("from books");
return query.getResultList();
}
UPDATE
das Problem also gelöst, aber ich habe nicht verstanden, warum die Variable wurde aktualisiert wird. Ich hatte ein Mathod, das die Werte der globalen Variablen einer anderen Variablen List<Integer> nonRatedBooks = allBooksIDs
zuordnete, und danach wurde die Variable aktualisiert. Ich habe gerade gechickt:
List<Integer> nonRatedPubs = new ArrayList<>();
nonRatedPubs.addAll(allBooksIDs);
Kann mir jemand erklären, warum es so war? Damit ich in Zukunft nicht den gleichen Fehler mache.
Wie überprüfen Sie die Größe? Ich sehe nicht, wie das möglich ist, basierend auf dem tatsächlichen Code, den Sie uns oben gezeigt haben. –
"Ich habe eine Variable' öffentliche statische Liste allBooks' ". Das ist eine schlechte Idee. Davon abgesehen müssen Sie weitere Informationen zur Belegung der Listen bereitstellen. –
bradimus
'allBooks' scheint nicht global in Ihrem Code definiert zu sein – JCoder