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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование массивов к новому типу 
:(
    Опции темы
Aprol
Дата 12.3.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть такой вот массив строк:
String[] arr=.....;
Нужно создать другой массив, той же размерности  и по необходимости использовать новый тип массива.
В итоге должен быть Integer[],Double[],String[] И т.д.
Создать новый массив нужной размерности и типа вроде не проблема:
Код

.....
String[] arr=new String[10];
......................
Class cls=Class.forName("<нужный класс элементов массива>");
Object newArray=Array.newInstance(cls,Array.getlength(arr));
 ..........

Получу в итоге например Integer[],а как теперь заполнить newArray значениями из arr?
Можно конечно наплодить кучу условий instanceof и в зависимости от них приводить типы:
Код

if (newArray instanceof Integer[]){
for(int i=0;i<Array.getlength(newArray);i++){
int j=(Integer)arr[i];
Array.setInt(newArray,i,j);
}
}
 
Ну и в таком духе для каждого типа, но имхо как то криво.
И как это преобразовать под матрицы?
PM MAIL   Вверх
ivg
Дата 12.3.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

Репутация: 33
Всего: 81



Грамотное применение идей Полиморфизма решает большую часть подобного рода проблем. smile
PM MAIL   Вверх
Platon
Дата 12.3.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ivg, полностью согласен.
Правда, могу сделать предложение для простоты - скакать от String, т.е. приводить все типы к строке, а потом к нужному типа.
PM MAIL ICQ   Вверх
LSD
Дата 12.3.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Aprol @  12.3.2009,  14:32 Найти цитируемый пост)
Получу в итоге например Integer[],а как теперь заполнить newArray значениями из arr?
Можно конечно наплодить кучу условий instanceof и в зависимости от них приводить типы:

А как ты вообще, из String собираешься получать Integer, Double и т.д.? У тебя есть некий универсальный конвертер, который может из строки получить произвольный тип?


--------------------
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   Вверх
Aprol
Дата 13.3.2009, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(LSD @  12.3.2009,  17:35 Найти цитируемый пост)
А как ты вообще, из String собираешься получать Integer, Double и т.д.?

А разве вот этот код не позволит мне создать массив требуемого типа?:

Код

Class cls=Class.forName("<нужный класс элементов массива>");
Object newArray=Array.newInstance(cls,Array.getlength(arr));

Класс элементов то я знаю...
Цитата(Platon @  12.3.2009,  17:04 Найти цитируемый пост)
приводить все типы к строке, а потом к нужному типа

Наверное криво объяснил, но изначально есть String[] кот. содержит строки, вот их то и нужно привести к новому классу.
String[] приходит из HttpServletRequest
.......................................
Код

Map param_map = request.getParameterMap();
Iterator iterator = param_map.entrySet().iterator();
while (iterator.hasNext()) {
......................................
Map.Entry me = (Map.Entry) iterator.next();
........................................
String[] arr = (String[]) me.getValue();}

Вот он и String[] который содержит значения параметров формы, они всегда будут приходить в виде строк.
Есть еще бизнес-логика в ней уже используются конкретные массивы Integer[],Double[] и т.д. Хранятся эти массивы в Object.
Такая последовательность получается:
получаю String[]->получение нового массива->сохранение нового массива в Object->
Поэтому мне нужно превести массив String[] в нужный массив. При этом какой класс я знаю(указан ввиде строки).
PM MAIL   Вверх
math64
Дата 13.3.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Если у теба используются Double, Integer ... а не double, int ..., для каждого используемого типа нужно создать фабрику, создающую объект нужного типа из строки.
В случае 2-, 3- мерного массива элементы массива будут массивами.
Тип элемента массива можно получить так:
Код

  Class doubleArrayClass =  new Double[0][0].getClass().getComponentType();

PM   Вверх
LSD
Дата 13.3.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Aprol @  13.3.2009,  04:06 Найти цитируемый пост)
А разве вот этот код не позволит мне создать массив требуемого типа?

Массив - позволит. А дальше тебе нужно будет как-то разбираться с элементами этих массивов.


--------------------
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.0688 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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