Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Модель таблицы и ArrayList <Object> / 11 сообщений из 11, страница 1 из 1
28.09.2006, 13:45:19
    #34018828
fplab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
Народ, кто объяснит, как победить сообщение об ошибке приведения в следующем коде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
     class  UsersTableModel  extends  AbstractTableModel {
         private  ArrayList <String> columnNames =  new  ArrayList <String> ();
         private  ArrayList <String> columnTypes =  new  ArrayList <String> ();
         private  ArrayList <Object>        data =  new  ArrayList <Object> ();

         public   int  getRowCount () {
             synchronized  (data) {
                 return  data.size ();
            }
        }

         public   int  getColumnCount () {
             return  columnNames.size ();
        }

         public  Object getValueAt ( int  row,  int  column) {
             synchronized  (data) {
                 return  ((ArrayList)data.get (row)).get (column);
            }
        }

         public   void  setValueAt (Object value,  int  row,  int  column) {
             synchronized  (data) {
                ((ArrayList)data.get (row)).set (column, value);    // Ругается на это
            }
        }
    }
Пишет: "unchecked call to set (int,E) as a member of the raw type java.util.ArrayList".
Уже ум за разум зашел. В принципе, все компилируется, но хотелось бы понять, где собака зарыта :(
Спасибо !!!
...
Рейтинг: 0 / 0
28.09.2006, 14:48:08
    #34019128
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
А вы можете объяснить, что в этой строке происходит?
Код: plaintext
1.
((ArrayList)data.get (row)).set (column, value);    
Может по честному сделать?
Код: plaintext
1.
2.
3.
4.
5.
6.
  Object elem = data.get(row);
  ArrayList temp;
   if  (elem  instanceof  ArrayList) {
   temp = (ArrayList)elem;
   ArrayList.set(column,value);
  }

И еще. Не пробовал, но кажется
Код: plaintext
1.
 private  ArrayList <Object>        data =  new  ArrayList <Object> ();
масло масляное.

И возможно, надо:
Код: plaintext
1.
 if  (elem  instanceof  ArrayList<Object>) {
...
Рейтинг: 0 / 0
28.09.2006, 14:51:21
    #34019144
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
И в догонку.
Код: plaintext
1.
 private  ArrayList <List> data =  new  ArrayList <List> ();
Правда, я с generics еще толком не разбирался. Поэтому тут наверняка какой-нибудь нюанс есть.
...
Рейтинг: 0 / 0
28.09.2006, 15:10:41
    #34019256
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 private  List <List<Object>> data =  new  ArrayList <List<Object>> ();
//...
 public   void  setValueAt (Object value,  int  row,  int  column) {
         synchronized  (data) {
            data.get(row).set(column, value);
    }
}
должно быть так. нету 1.5, проверить не могу.
...
Рейтинг: 0 / 0
02.10.2006, 19:07:28
    #34027022
ArmenA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
Должно быть типа

public ArrayList getRow(int row) {

return (ArrayList) data.get(row);
}
/**
* Updates the specified row. It replaces the row ArrayList at the specified
* row with the new ArrayList.
*
* @param updatedRowArrayList row data
* @param rowrow row number
*/
public void updateRow(ArrayList updatedRow, int row) {
data.set(row, updatedRow);
super.fireTableDataChanged();
}
/**
* Clears the table data.
*/
public void clearTable() {
data = new ArrayList();
super.fireTableDataChanged();

}
}
...
Рейтинг: 0 / 0
03.10.2006, 11:36:08
    #34028011
а может
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
а может проще сделать не ArrayList <Object> а ArrayList <Object[]> .и все проблемы исчезнут и работать с ArrayList <Object[]> станет легче
...
Рейтинг: 0 / 0
03.10.2006, 14:34:08
    #34028861
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
ххх
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 private  List <List<Object>> data =  new  ArrayList <List<Object>> ();
//...
 public   void  setValueAt (Object value,  int  row,  int  column) {
         synchronized  (data) {
            data.get(row).set(column, value);
    }
}



Т.к. доступ к data осуществляется по индексам, то лучше явно определить, что лист поддерживает доступ по индексу за o(1).
Т.е. должно быть примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 private  ArrayList <ArrayList> data =  new  ArrayList <ArrayList> ();
//...
 public   void  setValueAt (Object value,  int  row,  int  column) {
     synchronized  (data) {
         data.get(row).set(column, value);
    }
}
...
Рейтинг: 0 / 0
03.10.2006, 15:00:59
    #34028952
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
NotGonnaGetUs ххх
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 private  List <List<Object>> data =  new  ArrayList <List<Object>> ();
//...
 public   void  setValueAt (Object value,  int  row,  int  column) {
         synchronized  (data) {
            data.get(row).set(column, value);
    }
}



Т.к. доступ к data осуществляется по индексам, то лучше явно определить, что лист поддерживает доступ по индексу за o(1).
Т.е. должно быть примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 private  ArrayList <ArrayList> data =  new  ArrayList <ArrayList> ();
//...
 public   void  setValueAt (Object value,  int  row,  int  column) {
     synchronized  (data) {
         data.get(row).set(column, value);
    }
}

По-моему здесь это не принципиально.
...
Рейтинг: 0 / 0
03.10.2006, 19:25:17
    #34029905
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
TimmПо-моему здесь это не принципиально.
Выбор между двумя _работающими_ вариантами кода базируется на основе каких-то общих идей - принципов, т.е. он принципиален по определению :)
...
Рейтинг: 0 / 0
04.10.2006, 10:23:14
    #34030679
fplab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
Все здорово, но такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 private  ArrayList <ArrayList> data =  new  ArrayList <ArrayList> ();
//...
 public   void  setValueAt (Object value,  int  row,  int  column) {
     synchronized  (data) {
         data.get(row).set(column, value);
    }
}
выдает все то же предупреждение:
unchecked call to set(int,E) as a member of the raw type java.util.ArrayList.
Как таки эту бяку победить ?
...
Рейтинг: 0 / 0
04.10.2006, 10:29:18
    #34030696
fplab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модель таблицы и ArrayList <Object>
В догонку. А вот такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
         private  ArrayList <ArrayList<Object>> data =  new  ArrayList <ArrayList<Object>> ();

         public   void  setValueAt (Object value,  int  row,  int  column) {
             synchronized  (data) {
                data.get (row).set (column, value);
            }
        }
компилируется без ругани на ошибки приведения.
Нет, конечно, generics это классно. Только что делать, если надо перетащить приложение с кучей JTable написанное под Java 1.4 на Java 1.5 ? Можно, конечно, наплевать: warning не error, но хочется, чтобы было красиво :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Модель таблицы и ArrayList <Object> / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]