Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Как работать с массивами произвольного типа |
Автор: yaja 19.3.2006, 23:14 |
Возникла проблема. Необходимо передавать некоторый массив классу, а класс будет просто обрабатывать его данные. Точнее даже не обрабатывать данные, а преобразовывать их в строки и их просто выводить на экран. Проблема в том, что тип массива должен быть любым, т.е. и int и double и Object (последний не обязателен, но желателен)... Существует ли какой-то способ одинаково с ними работать?? Преобразовывать данные в строки во внешнем, по отношению к классу, коде не подходит... |
Автор: zer 20.3.2006, 10:22 |
Использовать Object[] у него же есть метод toString() |
Автор: LSD 20.3.2006, 10:33 |
Передавать ссылку как Object (не Object[] а именно Object) а в коде проверять тип массива и обрабатывать его соответсвенно. Или использовать классы оболочки Integer, Double и т.д. Добавлено @ 10:37 int[] нельзя передать как Object[], и метод toString() вернет что-то вроде [I@a4d5623. |
Автор: yaja 21.3.2006, 18:24 |
LSD, использовать классы оболочки будет слишком накладно... А передать как Object наверное подойдет. Только как проверять тип передаваемого массива? Делать обычное преобразование типа и проверять вылетает ли исключение? Или есть другой метод? |
Автор: powerOn 21.3.2006, 18:39 | ||
Есть такая конструкция волшебная instanceof с её помощью можно выполнить проверку типа вот примерчик
|
Автор: yaja 21.3.2006, 19:43 | ||
MoonCat, незнал, что он и с массивами работает ![]() Но я все-равно получаю немного не то, что ожидал. Тогда получается некоторый следующий код в классе
Что безусловно не есть гуд, если вдруг захочется передать массив другого типа... ![]() А нельзя ли использовать какой-нибудь стандартный контейнер? Такой, что при изменении самого массива, автоматически обновлялись данные и в контейнере?? |
Автор: powerOn 21.3.2006, 20:01 | ||
Ну тогда, видимо, надо сделать так
в зависимоти от решаемой задачи можно доработать метод paint. ![]() |
Автор: LSD 21.3.2006, 21:18 |
Проблема в том, что массив примитивного типа приводится только к Object. Соответсвенно даже для того чтобы тебе сделать итерацию по массиву уже надо знать его тип. Поэтому или 10 if-ов или оболочки. Слишком накладными классы оболочки становятся на размерах массива больше 1 000 000. А в чем проблема с универсальностью? Примитивных типов немного, и они добавляться не будут, а вот все остальный массивы можно передать как Object[]. Конечно есть универсальный вариант с рефлексией. Но он подходит только для Маленького теста, а не практического применения. |
Автор: yaja 21.3.2006, 22:16 |
MoonCat, работать для массивов типа int не будет ![]() При использовании оболочек Integer меня смущает то, что будет существовать два никак не связанных объекта, int[] и Integer[] и при изменении первого, второй эти изменения никак не прочуствует ![]() LSD, а как тут рефлексию приплести? Тоесть то, что мне представляется, никак не избавит от большого числа ifов. Мона считать, что приложение маленькое... ![]() Можно же получить два списка, отвечающих одной "области памяти". Например метод subList в java.util.List.. Неужеле нету никаких аналогов для массивов простых типов?? Если честно, не хочется писать 10 if (хотя их там меньше и не особо трудно это сделать) потому, что это как то не по "объектно-ориентированному" ![]() |
Автор: powerOn 21.3.2006, 23:11 | ||
сорри, код "на каленке" писал ![]() просто для развития мысли, не больше.... |