Оба типа замкнутых символов - это строки. Один тип цитаты удобно использовать для включения другого типа цитаты. "'"
и '"'
. Самая большая разница между типами котировок заключается в том, что ссылки с закрытыми идентификаторами заменяются внутри двойных кавычек, но не внутри одиночных кавычек.
Вы вызываете 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;
также может быть вариантом, который на самом деле быстрее (без проверки границ) и требует меньше памяти (без объекта массива, без информации о размере).
Вам также нужно передать E во внутренний класс
private class B<E> {
private B[] b;
private E item;
private B() {
this.b = new B[2];
}
} // end inner class B
B
- нестатический внутренний класс. Это означает, что у него есть ссылка на экземпляр окружающего класса. Поэтому он неявно параметризуется параметром типа внешнего класса. Поэтому, когда вы пишете B
, это означает A<E>.B
. Чтобы создать массив, вы должны использовать raw-класс. Однако B
не является сырым классом; для ссылки на необработанный класс, который вам нужно явно квалифицировать: A.B
Таким образом, вы хотите:
this.b = new A.B[2];