Tylko odniesienie dla przyszłych odwiedzających Załóżmy, że mamy tablicę o nazwie foo
który zawiera 10 pozycji. Co się stanie, jeśli spróbujemy wykonać iterację za pomocą następującego kodu?:
for(int i = 0;i<=foo.length;i++){
//some code that uses foo[i] here
}
Odpowiedzią jest IndexOutOfBoundsException
Powód jest prosty. Jak powiedziałem wcześniej foo
zawiera 10 elementów, co oznacza, że możesz uzyskać do nich dostęp za pomocą foo[0] to foo[9]
Ponieważ indeksowanie tablic zaczyna się od 0 foo[9]
zawiera ostatni element w Twojej tablicy (10. element)`
Co się jednak dzieje w for
pętla?
Podczas iteracji zawsze sprawdzasz i<=foo.length
aby kontynuować.Problem polega na tym, że gdy wartość i
to 9 wyrażenie i<=foo.length(which means i<=10)
ocenia jako true
.Oznacza to, że for
pętla uruchomi się po raz ostatni. Kiedy to się zdarzy w Twojej pętli, spróbujesz uzyskać dostęp do foo[10]
który nie istnieje i stąd IndexOutOfBoundsException
Pamiętaj więc, że gdy chcesz iterować po tablicy, zawsze użyj i<foo.length
Więc jak ty też to odkryłeś, rozwiązanie twojego problemu jest następujące:
for(int i=0; i< field.length; i++){
String[] field = allFields.split(",");
String field1 = "$"+field[i];
BsonField includeFields = Accumulators.first(field[i], field1);
includeList.add(includeFields);
}