![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Возникла проблема. Необходимо передавать некоторый массив классу, а класс будет просто обрабатывать его данные. Точнее даже не обрабатывать данные, а преобразовывать их в строки и их просто выводить на экран. Проблема в том, что тип массива должен быть любым, т.е. и int и double и Object (последний не обязателен, но желателен)...
Существует ли какой-то способ одинаково с ними работать?? Преобразовывать данные в строки во внешнем, по отношению к классу, коде не подходит... |
|||
|
||||
zer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 30.1.2006 Репутация: нет Всего: нет |
Использовать Object[] у него же есть метод toString()
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Передавать ссылку как Object (не Object[] а именно Object) а в коде проверять тип массива и обрабатывать его соответсвенно.
Или использовать классы оболочки Integer, Double и т.д. Добавлено @ 10:37 int[] нельзя передать как Object[], и метод toString() вернет что-то вроде [I@a4d5623. -------------------- 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. |
|||
|
||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
LSD, использовать классы оболочки будет слишком накладно...
А передать как Object наверное подойдет. Только как проверять тип передаваемого массива? Делать обычное преобразование типа и проверять вылетает ли исключение? Или есть другой метод? |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Есть такая конструкция волшебная instanceof
с её помощью можно выполнить проверку типа вот примерчик
|
|||
|
||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
MoonCat, незнал, что он и с массивами работает
![]() Но я все-равно получаю немного не то, что ожидал. Тогда получается некоторый следующий код в классе
Что безусловно не есть гуд, если вдруг захочется передать массив другого типа... ![]() А нельзя ли использовать какой-нибудь стандартный контейнер? Такой, что при изменении самого массива, автоматически обновлялись данные и в контейнере?? |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Ну тогда, видимо, надо сделать так
в зависимоти от решаемой задачи можно доработать метод paint. ![]() Это сообщение отредактировал(а) MoonCat - 21.3.2006, 20:22 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Проблема в том, что массив примитивного типа приводится только к Object. Соответсвенно даже для того чтобы тебе сделать итерацию по массиву уже надо знать его тип. Поэтому или 10 if-ов или оболочки. Слишком накладными классы оболочки становятся на размерах массива больше 1 000 000.
А в чем проблема с универсальностью? Примитивных типов немного, и они добавляться не будут, а вот все остальный массивы можно передать как Object[]. Конечно есть универсальный вариант с рефлексией. Но он подходит только для Маленького теста, а не практического применения. -------------------- 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. |
|||
|
||||
yaja |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 30.3.2005 Где: Санкт-Петербург Репутация: нет Всего: 1 |
MoonCat, работать для массивов типа int не будет
![]() При использовании оболочек Integer меня смущает то, что будет существовать два никак не связанных объекта, int[] и Integer[] и при изменении первого, второй эти изменения никак не прочуствует ![]() LSD, а как тут рефлексию приплести? Тоесть то, что мне представляется, никак не избавит от большого числа ifов. Мона считать, что приложение маленькое... ![]() Можно же получить два списка, отвечающих одной "области памяти". Например метод subList в java.util.List.. Неужеле нету никаких аналогов для массивов простых типов?? Если честно, не хочется писать 10 if (хотя их там меньше и не особо трудно это сделать) потому, что это как то не по "объектно-ориентированному" ![]() |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А все из-за того что у нас есть не объекты ![]() Так что способ, вполне нормальный. А про рефлексию, я пожалуй напишу в Маленький тест. Пусть народ развлечется, все равно этот способ нельзя считать практичным ![]()
Так они разное количество памяти на один элемент занимают, как минимум это мешает. -------------------- 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. |
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
сорри, код "на каленке" писал ![]() просто для развития мысли, не больше.... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |