Java: Почему этот код дает мне & ldquo; генерировать ошибку создания массива & rdquo ;? [Дубликат]

Оба типа замкнутых символов - это строки. Один тип цитаты удобно использовать для включения другого типа цитаты. "'" и '"'. Самая большая разница между типами котировок заключается в том, что ссылки с закрытыми идентификаторами заменяются внутри двойных кавычек, но не внутри одиночных кавычек.

5
задан Tshepang 23 August 2014 в 21:40
поделиться

3 ответа

Вы вызываете B наследуете родовое из внешнего класса, так как оно не является статичным. И вы не можете просто сделать его статическим, потому что ему также понадобится E.

Таким образом, вашему массиву B.b действительно понадобится тип, который является общим, т. Е. A<E>.B d измените свой код на внутренний класс static , A.B<E> (если вы будете использовать private static class B<E>).

В Java, из-за реализации дженериков (путем стирания ), тип массива не определен. С одной стороны, это должен быть массив из B, с другой стороны, он должен быть массивом Object.

Наиболее эффективным решением является использование Object[] и литье в явном виде. Если вам нужна повышенная безопасность типов, вы можете, конечно, использовать ArrayList<B>, который внутренне использует Object[] тоже!

В вашем конкретном коде B b1, b2; также может быть вариантом, который на самом деле быстрее (без проверки границ) и требует меньше памяти (без объекта массива, без информации о размере).

4
ответ дан Anony-Mousse 31 August 2018 в 20:15
поделиться

Вам также нужно передать E во внутренний класс

 private class B<E> {

            private B[] b;
            private E item;

            private B() {
                this.b = new B[2];
            }

        } // end inner class B
-2
ответ дан Horonchik 31 August 2018 в 20:15
поделиться

B - нестатический внутренний класс. Это означает, что у него есть ссылка на экземпляр окружающего класса. Поэтому он неявно параметризуется параметром типа внешнего класса. Поэтому, когда вы пишете B, это означает A<E>.B. Чтобы создать массив, вы должны использовать raw-класс. Однако B не является сырым классом; для ссылки на необработанный класс, который вам нужно явно квалифицировать: A.B

Таким образом, вы хотите:

this.b = new A.B[2];
2
ответ дан newacct 31 August 2018 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: