- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
@Override
public ResponseBag[] send(SmsBag[] smsBag) {
ArrayList<ResponseBag> responseList = new ArrayList<ResponseBag>();
for(SmsBag bag : smsBag) {
responseList.add(super.send(bag));
}
ResponseBag[] responseBag = new ResponseBag[responseList.size()];
return responseList.toArray(responseBag);
}
manyrus 18.08.2011 23:59 # 0
CPPGovno 19.08.2011 00:01 # 0
manyrus 19.08.2011 00:07 # +3
SmackMyBitchUp 19.08.2011 00:19 # +2
manyrus 19.08.2011 00:23 # 0
CPPGovno 19.08.2011 00:26 # 0
eth0 20.08.2011 16:37 # 0
CPPGovno 19.08.2011 00:39 # −2
roman-kashitsyn 19.08.2011 09:03 # 0
Lure Of Chaos 19.08.2011 00:42 # 0
CPPGovno 19.08.2011 00:43 # −1
return responseList.toArray();
manyrus 19.08.2011 01:20 # 0
CPPGovno 19.08.2011 07:59 # −2
tir 19.08.2011 08:02 # 0
roman-kashitsyn 19.08.2011 09:00 # 0
только толку от этого немного, одну строчку сыкономили.
tir 19.08.2011 07:56 # +4
Только почему super.send(bag), а не просто send(bag)?
П. С. В объявлениях переменной лучше использовать интерфейсы, т. е.
List<ResponseBag> responseList = new ArrayList<ResponseBag>();
Ну и можно было сразу размер списка задать через конструктор new ArrayList<ResponseBag>(smsBag.length).
Можно было так:
public ResponseBag[] send(SmsBag[] smsBag) {
ResponseBag[] responseBag = new ResponseBag[smsBag.length];
for (int i = 0; i < smsBag.length; i++) {
responseBag[i] = super.send(smsBag[i]);
}
return responseBag;
}
roman-kashitsyn 19.08.2011 08:55 # 0
А ещё лучше было бы совсем избавиться от массивов и использовать только списки. Если, конечно, есть такая возможность.
roman-kashitsyn 19.08.2011 09:30 # −1
Короче, довольно изысканное говнецо.
wvxvw 19.08.2011 12:03 # 0
Но я не на столько хорошо знаю Java, чтобы понять зачем столько раз нужно было создавать разные коллекции.
roman-kashitsyn 19.08.2011 12:32 # 0
очевидно (есть @Override), у super должен быть ещё и метод, отправляющий массив SmsBag
Он либо не реализован, либо делает не то, что нужно. Возможно ещё, что этот метод определён в некотором другом интерфейсе, не реализованным суперклассом, но мне кажется это маловероятным.
Подтвердить или опровергнуть догадки может только @manyrus.
> зачем столько раз нужно было создавать разные коллекции
Чтобы правильно перевести кошерные коллекции в некошерные массивы.
manyrus 19.08.2011 12:57 # 0
Namespace: components.
ISendSingLesms:
ISendingSms:
Так же тут есть 2 класса - ResponseBag и SmsBag - обычные классы со своими геттерами/сеттерами.
------------------------------
Namespace: components.epochta.
BaseSmsSender:
SendingSms:
SendingSingleSms:
Только вот это архитектура мне совсем не нравиться, за 2 мин. её придумал. Надо ещё посидеть :).
roman-kashitsyn 19.08.2011 13:05 # 0
Странно разделять один и тот же фасадный функционал по разным интерфейсам. Я бы сделал так:
Ещё мне не совсем понятен суффикс "Bag". Почему бы не использовать имена Sms и Response?
И, кстати, аннотация @Override над реализацией метода, определённого в интерфейсе, работает только в java 1.6. Если не хотите проблем с обратной совместимостью, лучше ставить её только при переопределении метода базового класса.
manyrus 19.08.2011 14:00 # 0
roman-kashitsyn 19.08.2011 14:15 # 0
wvxvw 19.08.2011 14:47 # −3
roman-kashitsyn 19.08.2011 15:06 # 0
Интерфейсы - добро и ядро IoC, наследование от обычных классов нужно довольно редко и должно наводить на размышления (очень часто его можно заместить композицией). Именно в этом конкретном случае лучше создать интерфейс и его реализацию, чем строить невнятные иерархии классов.
roman-kashitsyn 19.08.2011 15:13 # +1
наследование эллипса от круга так же бессмысленно, как и создание двух интерфейсов, один из которых посылает одно сообщение, а второй - коллекцию.
Разве недостаточно одного эллипса? Круг ведь - просто эллипс, у которого совпадают фокусы.
wvxvw 19.08.2011 16:13 # 0
Что до интерфейсов - то это типичное мировозрение любителей Java. Мне интерфейс, как часть языка, престваляется объектом очень сомнительной полезности. И потому, что не решает полностью возложенных на него задач (способ определения типа по этикетке не описывает все возможные определения типа и, что еще хуже, плохо расширяется и дополняется). В данном случае я не вижу необходимости в создании более одного класса, который посылает сообщения, и не вижу никакой необходимости в интерфейсах, наследовании и т.д.
roman-kashitsyn 19.08.2011 16:37 # +3
Видимо, вы не большой любитель юнит-тестирования.
roman-kashitsyn 19.08.2011 16:41 # +4
wvxvw 19.08.2011 16:57 # 0
А если серьезно, вы вообще не поняли о чем речь. То есть на столько не поняли, что я затрудняюсь как-то иначе ответить.
roman-kashitsyn 19.08.2011 17:11 # +2
Что-то в последнее время вы часто остаётесь недопонятым.
http://govnokod.ru/7422#comment100869
wvxvw 19.08.2011 18:15 # −1
roman-kashitsyn 19.08.2011 21:44 # +1
> Мне интерфейс, как часть языка, престваляется объектом очень сомнительной полезности
Думаю, тут комментарии излишни.
Проблему примера с Warrior я не понял, ибо draw(Sword) и draw(Picture) имеют разные сигнатуры и могут быть в разных интерфейсах. Выглядит, конечно, не ахти, но явных проблем я не вижу. Если вы не можете ясно выразить свои мысли, лучше дайте ссылку на литературу.
roman-kashitsyn 19.08.2011 21:46 # +4
wvxvw 19.08.2011 22:29 # −1
roman-kashitsyn 19.08.2011 22:56 # 0
Слышали о теории множеств? Наивная теория множеств приводит к парадоксам. Но именно теория множеств стала основой современной математики.
> Эту проблему нельзя решить никак - это как корень квадратный из -1
i ^ 2 = -1
Я так понял, что вы намекаете на динамическую типизацию, т.к. она, возможно, позволит избежать описанных вами проблем.
wvxvw 19.08.2011 23:42 # −2
Например...
Корень из минус единицы потому и называется иррациональным, что иррациональный...
roman-kashitsyn 19.08.2011 23:44 # +2
мнимый. Иррациональное число не представимо в виде отношения целых.
wvxvw 20.08.2011 00:06 # −3
roman-kashitsyn 20.08.2011 00:24 # +2
И, кстати, как раз типы чисел укладываются в строгую иерархию.
Уж поверьте, в математике я кое-что смыслю.
roman-kashitsyn 20.08.2011 00:26 # +1
wvxvw 20.08.2011 00:10 # −2
roman-kashitsyn 20.08.2011 00:52 # +5
roman-kashitsyn 20.08.2011 00:08 # +2
Кстати, я так и не понял, причём здесь интерфейсы. Проблема возникает не из-за интерфейсов как таковых, а из-за того, что мир не укладывается в единственно правильную таксономию (что и ежу понятно). Вы призываете избегать интерфейсов как инструмента абстракции и объявлять всё обычными классами. Что никак не исправит описанной вами проблемы.
wvxvw 20.08.2011 00:25 # −1
- ненужный код (интерфейс призван решать определенные проблемы, которые в приведенной задаче не наблюдаются).
- интерфейс плохо справляется с проблемами, которые он призван решать (в принципе).
- класс выполняющий более узко-специфичную функцию является прототипом класса с менее специфичной функцией (отправить одно сообщение - это частный случай отправки множества сообщений).
Последняя проблема может быть воспринята двояко (о чем и говорилось в сравнении с проблемой круг - эллипс). И, возможно, в каком-то свете и не проблема вовсе, но было это сказано с иронией по поводу того, как автор восхвалял прелести ОО в Java по сравнению с PHP, хотя, если по-честному, они не так уж и различаются... (и в этом конкретном случае ведут себя одинаково).
roman-kashitsyn 20.08.2011 00:44 # +2
как тестировать зависимой код, если нельзя подложить в тесте реализацию-заглушку? Отсылать кому-то реальные СМС? Отнаследоваться и полностью переопределить методы суперкласса? бред.
> интерфейс плохо справляется с проблемами, которые он призван решать
он отлично справляется с проблемами, которые призван решать, а именно гарантировать, что программист предоставил реализации для методов, определённых в интерфейсе, и скрывать конкретную реализацию. Остальное на совести программиста.
> класс выполняющий более узко-специфичную функцию является прототипом класса с менее специфичной функцией
Вгляните на интерфейс Collection. У него есть методы add и addAll. Потому что создавать ещё один класс только чтобы предоставить add, вызывающий addAll - маразм.
Итак, я вообще никаких проблем не вижу.
> автор восхвалял прелести ОО в Java по сравнению с PHP
не помню такого. в php даже все ключевые слова для ООП с java слизаны. php просто поощряет использование не-ООП практик. Причём не самых лучших. Поэтому новичок в java, пересевший с php, пишет далеко не самый лучший код.
У меня складывается впечатление, что вы не особо глубоко вникали в ООП.
P.S. Мне больше по душе функциональный стиль, но для каждой задачи нужен свой инструмент.
roman-kashitsyn 20.08.2011 00:56 # +1
Извиняюсь, я понял, о чём вы. По глупости принял на свой счёт.
wvxvw 20.08.2011 09:49 # −1
Проблема померять эту диагональ... если продолжать в таком же шуточном духе - вы можете попробовать сделать линейку для того, чтобы эту диагональ измерять
roman-kashitsyn 20.08.2011 10:20 # +1
Вы что, правда ТАК делаете? Не хотел бы я поддерживать ваш код. Вы используете наследование явно не по назначению.
> Проблема померять эту диагональ
Зачем вам её мерить? она в точности равна корню из двух.
Думаю, дискуссия себя исчерпала.
wvxvw 20.08.2011 11:49 # −2
inkanus-gray 20.08.2011 13:13 # +3
roman-kashitsyn 20.08.2011 13:25 # +2
Учите матчасть, у меня нет больше ни малейшего желания объяснять такие вещи.
wvxvw 20.08.2011 13:38 # −3
Может вы еще и правильный семиугольник построите заодно, ну, чтобы человечество освободить от еще одной, казалось бы неразрешимой проблемы? :D
roman-kashitsyn 20.08.2011 13:49 # +2
wvxvw 20.08.2011 14:11 # −2
Отметить можно только приблизительно - в этом и заключается проблема. Т.е. если у нас линейка будет в сантиметрах, дюймах или еще чем, то корень из двух сантиметров на ней никак не отметить. Обратное тоже справедливо - если у вас будет линейка, на которой вы бы отмечали только значения кратные корню из двух сантиметров, то целые или дробные значения в сантиметрах вы бы не могли точно отметить на той же линейке. Конечно, для каждой ситуации можно [попытаться] добиться результата с приемлимой точностью, но абсолютно точно - не получится.
FAKYOUINTIRNEAT 20.08.2011 14:48 # +4
gegMOPO4 20.08.2011 15:55 # +5
gegMOPO4 20.08.2011 15:53 # +3
gegMOPO4 20.08.2011 15:59 # +3
wvxvw 20.08.2011 18:36 # −2
gegMOPO4 20.08.2011 20:18 # +3
Попробуйте представить 2 сантиметра точно дюймовой линейкой.
И я сомневаюсь, что вы держали в руках линейку, точность делений которых меньше 1e-17 (для сантиметровой это много меньше размера ядра атома).
wvxvw 20.08.2011 21:25 # −2
Это невозможно потому, что что бы вы ни отметили на линейке будет целым числом каких-то минимальных ее составляющих. Иррациональные числа, по определению не могут быть представлены таким способом. Т.о. если у вас будет идеальная линейка, то, если вам нужно будет измерять что-то, что являестя рациональным числом по отношению к делению этой линейки, то, потери точности не будет. Но та же самая линейка не будет точно измерять то, что по отношению к делению этой линейки ялвяется иррациональным числом.
roman-kashitsyn 20.08.2011 21:50 # +6
Lure Of Chaos 20.08.2011 21:58 # 0
точность, однако, является также числом конечным, а для представления иррационального числа нужна бесконечная точность - таким образом, на линейке будет представлено рациональное число, с точностью до некоторого числа цифр после запятой совпадающее с нужным иррациональным.
ни один физический измерительный прибор не может быть бесконечно точен.
даже эталон килограмма и тот допускает минимальное отклонение веса.
inkanus-gray 20.08.2011 23:18 # 0
Вы можете точно сказать, деления логарифмической линейки рациональны или иррациональны?
gegMOPO4 21.08.2011 11:57 # +4
Если линейка идеальная, то любое число, хоть целое, хоть иррациональное, хоть трансцендентное, на ней отложить можно (и «отложить число» — значит отложить отрезок, в определённое число раз отличающийся от единичного, а длина этого единичного может быть иррациональной относительно другого). Если же линейка реальная, физическая, то любая отметка нанесена на ней с определённой точностью, и единица не точнее корня с двух.
Lure Of Chaos 20.08.2011 20:54 # +2
Магистро велемуро штангенциркуль членомеро
SmackMyBitchUp 19.08.2011 23:38 # 0
gegMOPO4 19.08.2011 18:31 # 0
gegMOPO4 19.08.2011 18:34 # 0
wvxvw 19.08.2011 19:27 # +1
wvxvw 19.08.2011 13:18 # −2
Я надеюсь, вам хоть платят достойно за проделанную работу :) Иначе - себя пожалейте :)
roman-kashitsyn 19.08.2011 13:29 # +1
manyrus 19.08.2011 13:59 # 0
SmackMyBitchUp 19.08.2011 14:16 # 0
roman-kashitsyn 19.08.2011 14:17 # 0
manyrus 19.08.2011 14:20 # 0
Lure Of Chaos 19.08.2011 11:59 # 0
roman-kashitsyn 19.08.2011 12:34 # 0
Lure Of Chaos 19.08.2011 12:45 # 0
guest8 09.04.2019 11:21 # −999