Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Копирование массивов


Автор: Sherst 21.9.2006, 15:28
Привет всем!
Я наверное туплю, и все же вопрос smile :

Допустим есть класс SelectItem

Код

class SelectItem {
 private String value;
 private String label;
 private String description;

 public String getDescription() {
   return description;
 }
 ppublic void setDescription(String description) {
   this.description = description ;
 }
 // И такие же get/set методы для всех полей-свойств класса
}


Есть ArrayList с заполненными данными:

Код

List t = new ArrayList();
t.add("fio1");t.add("fio2");t.add("fio3");


Необходимо создать массив ссылок SelectItem:
Код

SelectItem[] si = new SelectItem[t.size()];


И скопировать значения из ArrayList в массив SelectItem[].Вот тут и начинаются проблемы.Есть метод toArray:

Код

t.toArray(si);


Но здесь не понятно как инициализируются поля SelectItem - value, label, description
И соответсвенно получаю исключение ArrayStoreException
Вообщем вот такой вопрос.
И еще значения полей value, label, description должны быть одинаковыми
Код

st[0].value = "fio1" st[0].label = "fio1" st[0].description = "fio1"



За ранее спасибо.

Автор: powerOn 21.9.2006, 15:46
Напиши свой метод копирования в массив, который учитывает все тонкости.

Автор: COVD 21.9.2006, 15:56
Метод toArray() возвращает Object[] ,  а toArray(objet) возвращает массив класса обьекта, который в аргументе. Обьект в аргументе должен быть того же класса, что и элементы в коллекции и кастинг внутри делается. Это просто для удобства, никаких чудес.

Код

HashMap map = new HashMap();
for(int i = 0 ; i < 10; i++){
 Integer n = new Integer(i); 
 map.put(n,n); 
}

Integer[] values = map.values().toArray(new Integer[]);


таким образом возвращается копия ссылок в виде массива размером 10. Синхронизировать эту операцию тоже самим надо, если необходимо.

Автор: Sherst 21.9.2006, 16:51
to COVD 
Спасибо за разъяснения

Автор: VSergeyV 4.8.2009, 06:16
Цитата(COVD @  21.9.2006,  15:56 Найти цитируемый пост)
Integer[] values = map.values().toArray(new Integer[]);

А у меня требует фигурные скобки {}, иначе array dimension missing
с ними работает
Код

Integer[] values = map.values().toArray(new Integer[]{});

jdk 1.6.0_11
Синтаксис чтоли поменяли?

Автор: 4EJIOBEK 4.8.2009, 08:47
не поменяли, просто при создании массива нужно либо задавать размерность в [], либо инициализировать массив элементами в {елем1, елем2,...}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)