Mam kodKiedy obiekt List.addAll() rzuca wyjątek IllegalStateException?
private List<Field> subFields;
private Collection<Field> subFieldsCollection;
...
try {
if (subFields == null && subFieldsCollection != null && !subFieldsCollection.isEmpty()) {
subFields = new ArrayList<>();
subFields.addAll(subFieldsCollection);
}
} catch (IllegalStateException e) {
...
}
i zastanawiam się jak to może zdarzyć IllegalStateException
zostać wyrzucony. Najwyraźniej zdarzyło się to użytkownikowi mojej aplikacji, ale nie jestem w stanie wyśledzić, co było nie tak.
Dokumentacja Collection.addAll()
mówi:
IllegalArgumentException - jeśli nie wszystkie elementy mogą być dodawane w tym czasie ze względu na ograniczenia wstawiania
ale jakie są ograniczenia wstawiania?
Zgaduję, że to zależy od dokładnego typu kolekcji. Używam ArrayList, więc sprawdźmy dokumenty dla addAll()
z List
interfejsu:
IllegalArgumentException - jeśli niektóre właściwość elementu określonej kolekcji uniemożliwia dodaje do tej listy
Cóż, właściwość elementu może uniemożliwić dodanie elementu do listy? Moje obie kolekcje są tego samego typu, powinienem móc dodać wartości null.
Czy ktoś może mi to wyjaśnić?
Po prostu kręcę tu w ciemności, ale czy może nie być połączony ze współbieżnością? – Mackiavelli
Nie jest do końca jasne, której wersji Java używasz, ale kod źródłowy dla Java SE 6 nigdy nie zgłasza tego wyjątku z 'addAll()' z wyjątkiem pośrednio podczas uzyskiwania dostępu do 'Collection'. Czy widziałeś ślad stosu i czy jesteś pewien, gdzie wyjątek został zgłoszony? – Persixty
Dodaj ślad stosu wyjątku do swojego pytania. – VGR