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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Unchecked call при Vector.setElement(), Как правильно вставлять эл-ты? 
V
    Опции темы
Real McCoy
  Дата 28.7.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Научите хорошему, плз smile
Материалы, которые есть здесь, читал, потому и занялся чисткой кода, но в одном конкретном случае застрял.

У меня есть таблица с кастомной моделью. В строке таблицы данные разнородные, поэтому представляю их тип как Object. Строки таблицы хранятся в векторе - члене класса модели:
Код

class MyTableModel extends AbstractTableModel
{
  // ... методы модели
  public void setValueAt(Object value, int rowIndex, int columnIndex)
  {
    if(rowIndex >= dataVector.size() || columnIndex >= columns.length)
      return;

    Vector rowVector = dataVector.elementAt(rowIndex);
    rowVector.setElementAt(value, columnIndex);
    fireTableCellUpdated(rowIndex, columnIndex);
  }
  // ... методы модели

  // Хранилище строк таблицы.
  Vector<Vector> dataVector;
}

При компиляции с ключом -Xlint:unchecked получаю предупреждение:
[unchecked] unchecked call to setElementAt(E,int) as a member of the raw type java.util.Vector
При этом в NetBeans выделяются скобки с аргументами у setElementAt().

Пытался получить вектор строки таблицы как
Код

Vector<Object> rowVector = dataVector.elementAt(rowIndex);

Тогда получаю предупреждение:
[unchecked] unchecked conversion
и выделяются скобки у elementAt().

ПОнимаю, что что-то недопонимаю, подскажите, плз, что именно и как правильно?
Спасибо!
PM MAIL   Вверх
Tony
Дата 28.7.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Добавь @SuppressWarnings("unchecked");


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Real McCoy
Дата 28.7.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Tony, 
Я их не suppress хотел, а разобраться, что к чему и почему smile
PM MAIL   Вверх
Tony
Дата 28.7.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Коллекции должныбыть с генериками. 


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
math64
Дата 28.7.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 8
Всего: 72



Код

Vector< Vector< Object > > dataVector;

Между > > оставляй пробел
PM   Вверх
w1nd
Дата 29.7.2007, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 20
Всего: 54



Цитата(math64 @  28.7.2007,  21:40 Найти цитируемый пост)
Между > > оставляй пробел

Зачем?

Это сообщение отредактировал(а) w1nd - 29.7.2007, 00:15


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
nornad
Дата 29.7.2007, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(w1nd @  29.7.2007,  03:14 Найти цитируемый пост)
Зачем?

Видимо, тайные знания массонов. smile

Цитата(Real McCoy @  28.7.2007,  18:00 Найти цитируемый пост)
подскажите, плз, что именно и как правильно?

Цитата(Real McCoy @  28.7.2007,  18:00 Найти цитируемый пост)
Vector rowVector = dataVector.elementAt(rowIndex);

Цитата(Real McCoy @  28.7.2007,  18:00 Найти цитируемый пост)
[unchecked] unchecked call to setElementAt(E,int) as a member of the raw type java.util.Vector

Из последней строки (сообщение) видно, что компилятор хочет пихать некий Е, который соответтсвует параметризующему вектор типу. Ты же пихаешь туда что? Правильно, голый вектор (без параметризации). Ну и объявление самого вектора строк, как тебе подсказали, тоже должно быть нормально параметризованным (если одна строка - это вектор объектов, то так и параметризуй). А то у тебя получается странная картина - параметризация только наполовину.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Real McCoy
Дата 29.7.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(nornad @  29.7.2007,  02:13 Найти цитируемый пост)
Из последней строки (сообщение) видно, что компилятор хочет пихать некий Е, который соответтсвует параметризующему вектор типу. Ты же пихаешь туда что? Правильно, голый вектор (без параметризации). Ну и объявление самого вектора строк, как тебе подсказали, тоже должно быть нормально параметризованным (если одна строка - это вектор объектов, то так и параметризуй). А то у тебя получается странная картина - параметризация только наполовину.

nornad, погодите, я ж написал, что когда делаю так:
Код

    Vector<Object> rowVector = dataVector.elementAt(rowIndex);
    rowVector.setElementAt(value, columnIndex);
    fireTableCellUpdated(rowIndex, columnIndex);

т.е. параметризую получаемый вектор строки таблицы, а потом пытаюсь запихнуть в него value типа Object (вроде бы правильно, да?), тогда компилятор выдаёт предупреждение
[unchecked] unchecked conversion
и выделяются скобки с параметром у вызова dataVector.elementAt(rowIndex);
Но ведь dataVector у меня параметризован, и я хочу получить у него содержимое такого типа, каким он параметризован, т.е. Vector.
Это предупреждение меня и смущает. 
PM MAIL   Вверх
nornad
Дата 29.7.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Real McCoy @  29.7.2007,  16:05 Найти цитируемый пост)
т.е. параметризую получаемый вектор строки таблицы, а потом пытаюсь запихнуть в него value типа Object (вроде бы правильно, да?)

Ты уверен, что компилятор ругается на строку установки значения в rowVector, а не на конвертацию неизвестного вектора в вектор объектов? smile 
Тебе говорят про то, что по уму надо вместо
Цитата(Real McCoy @  28.7.2007,  18:00 Найти цитируемый пост)
Vector<Vector> dataVector;

сделать
Цитата(math64 @  29.7.2007,  00:40 Найти цитируемый пост)
Vector< Vector< Object > > dataVector;


Добавлено через 1 минуту и 23 секунды
Цитата(Real McCoy @  29.7.2007,  16:05 Найти цитируемый пост)
Но ведь dataVector у меня параметризован

Через ж... он у тебя параметризован. smile

Добавлено через 2 минуты и 35 секунд
Ну и напоследок.
Цитата(Real McCoy @  29.7.2007,  16:05 Найти цитируемый пост)
и я хочу получить у него содержимое такого типа, каким он параметризован, т.е. Vector.

Vector.class != Vector<Object>.class


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
Real McCoy
Дата 29.7.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(nornad @  29.7.2007,  14:19 Найти цитируемый пост)
Ты уверен, что компилятор ругается на строку установки значения в rowVector, а не на конвертацию неизвестного вектора в вектор объектов?  
Тебе говорят про то, что по уму надо вместо

Vector<Vector> dataVector;

сделать

Vector< Vector< Object > > dataVector;


nornad, спасибо большое! Я так попробовал сначала ещё, но выскочили ещё более запутавшие меня предупреждения в других местах, а т.к. всё началось именно с этого, хотел разобраться сначала с этим. Теперь с Вашей помощью разобрался и поправил всё как надо. Заодно разобрался с generic'ами и параметризацией smile
Ещё раз спасибо!
PM MAIL   Вверх
LSD
Дата 30.7.2007, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(nornad @  29.7.2007,  15:19 Найти цитируемый пост)
Vector.class != Vector<Object>.class

На самом деле Vector.class == Vector<Object>.class smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
nornad
Дата 30.7.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(LSD @  30.7.2007,  16:00 Найти цитируемый пост)
На самом деле Vector.class == Vector<Object>.class

Спорить не буду. Если честно - не проверял. Главное - по смыслу различаются. smile


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
w1nd
Дата 30.7.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

Репутация: 20
Всего: 54



Цитата(LSD @  30.7.2007,  13:00 Найти цитируемый пост)
На самом деле Vector.class == Vector<Object>.class

Компилятор этого мнения не разделяет. Для него Vector.class == Vector<?>.class
Тот факт, что "?" без уточняющих шаблонов и есть Object, по-любому, не всегда до него доходит smile


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Real McCoy
Дата 30.7.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(LSD @  30.7.2007,  13:00 Найти цитируемый пост)
На самом деле Vector.class == Vector<Object>.class 

Однако ж пока не объявил хранилище строк таблицы как
Код

Vector<Vector<Object>> data;

при попытке вставить в data объект типа Vector<Object> получал от компилятора предупреждение об unchecked call.
PM MAIL   Вверх
LSD
Дата 30.7.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Попробуйте
Код
Vector a = new Vector();
Vector<String> b = new Vector<String>();
System.out.println(a.getClass() == b.getClass());


Я говорил, о том, что в рантайме генериков нет. Будут разные типы, но класс будет один и тот же.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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