2012-03-25 3 views
1
Stack<E>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), 
        new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()}; 

Для класса я должен был создать собственный класс Stack, который принимает любой объект, который я указываю. Согласно спецификации, я должен поместить все стеки в массив.Создание массива общих стеков

Но, когда я пытаюсь создать массив из стеков, я получаю ошибку «не могу найти символ: класс E».

Что можно сделать для создания массива общих стеков?

+2

Вы не можете создать массив дженериков. Но что бы вы хотели с этим сделать, если бы могли? –

+2

Вам почти наверняка лучше создать «Список» 'Stacks'. (Хотя для вашего конкретного случая я, откровенно говоря, считаю, что вам не следует создавать массив или список вообще, но следует хранить списки разных типов как явные, отдельные переменные.) –

ответ

6

Generic объявления типа, такие как <E> работают только тогда, когда вы определяете класс, как

public class Stack<E>{ 
// etc. 
} 

Чтобы создать массив стеков, как вы делаете, вы можете либо использовать подстановочные родовое:

Stack<?>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()}; 

Или, если все ваши объекты внутри штабеля имеют общее наследство, можно сузить подстановочные с чем-то вроде

Stack<? extends Furniture>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()}; 
+1

'Stack []' работает, но 'Stack [] 'не потому, что вы не можете создавать общие массивы, по крайней мере, не с этим красивым коротким синтаксисом:/ –

+0

Большое спасибо! – prunes4u

Смежные вопросы