массив стеков - PullRequest
5 голосов
/ 08 мая 2009

Можно ли создать массив стеков, не разыгрывая стеки по мере их выхода? Eclipse предупреждает меня о невозможности создать общий массив Stack, когда я делаю что-то вроде этого:

Stack<Card>[] cards = new Stack<Card>[52];

Ответы [ 6 ]

9 голосов
/ 08 мая 2009

Джошуа Блох отлично справляется с описанием этой проблемы в Effective Java, Second Edition . Проверьте соответствующий раздел в Поиске книг Google .

Совет, который он предлагает, состоит в том, чтобы предпочесть списки массивам. Ваш код может выглядеть примерно так:

List<Stack<Card>> cards = new ArrayList<Stack<Card>>();
2 голосов
/ 08 мая 2009
Stack<Card>[] decks = new Stack[9];       // Declare
Card c = decks[5].pop();                  // This compiles - java 'knows' the type
Integer i = decks[4].pop();               // This will not compile
2 голосов
/ 08 мая 2009

Вы можете сделать следующее, хотя это выдает предупреждение "unchecked" компилятором.

Stack<Card>[] cards = (Stack<Card>[]) new Stack[52];
1 голос
/ 08 мая 2009

Почему вы так или иначе используете массивы?

Это структура программирования низкого уровня.

Вместо List или Set (например, org.apache.commons.collections.list.LazyList), если вы не хотите беспокоиться о инициализации.

Или, по крайней мере,

Arrays.asList(new Stack[52]), чтобы обернуть массив в список.

Я не смог воспроизвести ошибку jour в любом случае .. :( возможно, это потому, что другой набор предупреждений / уровня ошибок.

0 голосов
/ 08 мая 2009

Это связано с стиранием типов. В основном универсальные типы существуют только во время компиляции и не присутствуют во время выполнения

Посмотрите на это сообщение на форуме для лучшего объяснения.

0 голосов
/ 08 мая 2009

Ну, массив не должен быть универсальным, потому что он всегда определяется как этот. Почему ты думаешь, что должен сыграть? Я думаю, что затмение здесь несколько запутано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...