Мы получаем эту ошибкуРазличные реализации ArrayList
java.lang.NullPointerException
at java.util.ArrayList.<init>(Unknown Source)
at de.mystuff.ExtendedArrayList.<init>(ExtendedArrayList.java:38)
где ExtendedArrayList: 38
new ArrayList(new ArrayCollection<E>(data));
Короче: конструктор ArrayList иногда кажется задыхаться на нашей домашней выращены ArrayCollection реализации коллекции.
Я не смог воспроизвести его на своем компьютере даже с той же версией, которая была распространена среди наших клиентов.
Но я не уверен на 100%, что они используют JRE, который мы включили. Итак, я гугл для некоторого исходного кода ArrayList.java и нашел OpenJDK 6b17, который имеет этот
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
Это будет иметь смысл, потому что если нет данных нашего ArrayCollection.toArray() возвращаетнуля. И этот конструктор выглядел безопасным (и работал без исключения) для реализации 1.5.0_09 Sun JDK/JRE, которую мы используем.
Но openJDK, похоже, выпускает для мира unix. Этот код также является частью Windows JRE? И если да, то какая версия?
NB: Я знаю, что мы должны исправить наши классы, но я хочу убедиться, что я понимаю причину исключения NullPointerException.
Из интереса, почему вам нужно расширить 'ArrayList'? –
Это просто ярлык для преобразования массивов в типизированные списки. Но я думаю, вы хотели спросить, почему мы реализуем коллекцию с нуля - это наша работа для ИТ-директоров. Я думаю, что я собираюсь заменить это на Arrays.asList() ... – Stroboskop