Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> параметризованный массив стеков 
:(
    Опции темы
monax
Дата 18.10.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 9.6.2005

Репутация: нет
Всего: 4



Нужно создать массив стеков. 
Код

    Stack st[] = new Stack[10];
    st[0].push(new Integer(0));

Но выскакивает предупреждение:
Цитата

Type safety: The method push(Object) belongs to the raw type Stack. References to generic type Stack<E> should be parameterized.


Для одного стека использую код:
Код

    Stack<Integer> st = new Stack<Integer>();
    st.push(new Integer(0));

Как создать параметризованный массив стеков, чтобы не выскакивало предупреждение?
--------------------
Лаборатория программиста
PM MAIL WWW ICQ Jabber   Вверх
mbasil
Дата 18.10.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Так Вы уже сами и ответили. Используйте везде типизированные коллекции

Код

Stack<Integer> st = new Stack<Integer>();
 

Только на предупреждение можно честно и благородно плюнуть. Это с одной стороны.

А с другой стороны напоминаю Вам, что Stack порожден "по непонятным причинам" (так сам Блох пишет) от Vector, а вектор, извините Thread  save. Так что, если Stack Вам нужен для практических целей лучше присмотреть что-либо другое.

PM MAIL   Вверх
Platon
Дата 18.10.2007, 11:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Необходима инициализирующая структура:
Код

Stack<Integer>[] st = new Stack[10];
        for (int i = 0; i < st.length; i++) {
            st[i] = new Stack<Integer>();
        }


Добавлено через 1 минуту и 44 секунды
Вообще, для изучения всем рекомендую использовать IDE, хочешь-не хочешь найдешь ответ.
PM MAIL ICQ   Вверх
Royan
Дата 18.10.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Platon, mbasil,  вы неверно поняли вопрос. 
monax, хочет создать параметризрованный массив, но таковые запрещены в случае когда создаются с ограничениями по типу

Сделано это дабы избежать подобных ситуаций
Код

Stack<String>[] stack_arr= new Stack<String>[10]; // вообще-то тут ошибка компиляции, но положим бы ее не было
Object o = stack_arr;
Object[] oa = (Object[]) o;
Stack<Integer> stack = new Stack<Integer>();
stack.push(new Integer(3));
oa[1] = stack; // спокойно присваеваем элемент, параметризованный Integer в массив параметризованный String
String s = stack_arr[1].get(0); // Bang-bang: ClassCastException


Именно поэтому хаки подбные этому на деле все равно не прокатывают:
Код

public class Test {
  private ArrayList<Integer>[] test (int len) {
        ArrayList <ArrayList<Integer>> al2 = new ArrayList <ArrayList<Integer>>();
        for (int i = 0; i < len; ++i) {
            al2.add (new ArrayList<Integer>());
        }
        // warning "[unchecked]" unchecked cast
        return (ArrayList<Integer>[])al2.toArray();
    }
    public static void main(String[] args) {
        Test test = new Test();
        ArrayList<Integer>[] arrayOfLists = test.test(10);
    }
}

Самое большое на что можно расчитывать в данном случае это на 
Код

Stack<?>[] st = new Stack<?>[10];



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
monax
Дата 18.10.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 9.6.2005

Репутация: нет
Всего: 4



mbasil, мне нужен был массив типизированных коллекций.

Platon, ваш код тоже выдаёт предупреждение: The expression of type Stack[] needs unchecked conversion to conform to Stack<Integer>[]

Royan, большое спасибо за пояснения.

Мне было нужно переменное количество стеков для хранения рекурсивных состояний системы. Решил использовать такой вариант:
Код

Vector<Stack<Integer>> vs = new Vector<Stack<Integer>>();
vs.add(new Stack<Integer>());
vs.get(0).push(new Integer(0));



--------------------
Лаборатория программиста
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.