- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
public void set...(...){
...
throw INVALID_PARAM;
}
public void set...(...){
...
throw INVALID_PARAM;
}
public void set...(...){
...
throw INVALID_PARAM;
}
...
private final static Exception INVALID_PARAM=new RuntimeException("Incorrect value!");
Steve_Brown 09.06.2012 10:03 # 0
roman-kashitsyn 09.06.2012 10:24 # +2
Кроме того, юзабельность нулевая: что за параметр? какое было значение? какое должно было быть?
Steve_Brown 09.06.2012 12:46 # 0
throw ParameterException("theName", value);
Lure Of Chaos 09.06.2012 12:50 # 0
bormand 09.06.2012 13:07 # +1
- надо описать класс
+ удобство вызова
+ стектрейс откуда надо
+ можно будет отлавливать это конкретное исключение, а не все исключения о кривом аргументе
Конечно же, это мое имхо, а не рекомендации вам.
Lure Of Chaos 09.06.2012 13:10 # +1
UncleAli 09.06.2012 14:23 # +2
bormand 09.06.2012 14:26 # +1
bormand 09.06.2012 10:44 # +1
tir 09.06.2012 10:54 # 0
bormand 09.06.2012 11:20 # +1
tir 09.06.2012 11:29 # +1
bormand 09.06.2012 13:15 # 0
Здесь тоже можно легко сменить тип, от которого порожден эксепшн, и добавить дополнительные поля. Так что функция под сомнением...
tir 09.06.2012 14:45 # 0
bormand 09.06.2012 14:52 # 0
tir 09.06.2012 14:58 # 0
В идеале вообще можно было бы объявить функцию
но к сожалению, это будет не всегда применимо.
Lure Of Chaos 09.06.2012 18:44 # +1
ЗАЧЕМ?
не проще ли логгер натравить на stderr (который System.err)?
tir 09.06.2012 20:36 # 0
Lure Of Chaos 09.06.2012 20:46 # 0
Lure Of Chaos 09.06.2012 18:46 # +1
tir 09.06.2012 20:35 # 0
Lure Of Chaos 09.06.2012 20:50 # 0
як дiти (ц)
bormand 09.06.2012 20:56 # 0
Lure Of Chaos 09.06.2012 21:02 # 0
ну я не вижу проблем конструктору передавать объект со всеми необходимыми данными. можно даже перегрузить сколько надо раз для различных объектов.
просто не надо жабе пытаться привить функциональный стиль
tir 09.06.2012 20:49 # 0
а где-то в коде класса идут несколько вызовов
и тут вдруг потребовалось заменить user.getName() на user.getFullName().
при Вашем подходе требуется намного больше телодвижений, чем при моем.
П. С. Если Вы не ленивый человек и в совершенстве владете find/replace, то мы друг друга не поймем =)
Lure Of Chaos 09.06.2012 20:53 # 0
опять же, где функция спасет?
tir 09.06.2012 21:01 # 0
Lure Of Chaos 09.06.2012 21:05 # 0
а вообще да, пользуйтесь IDEшками и почаще рефакторите код, а не подставляйте странно выглядящие костыли.
tir 09.06.2012 21:17 # 0
и далее в коде писать
или вы сторонник везде в коде писать
Lure Of Chaos 09.06.2012 21:34 # 0
т.е. я предлагаю ту же функцию createObject делать конструктором SomeObject
в каждом конкретном случае свои аргументы. иногда можно вообще varargs заюзать
tir 09.06.2012 21:37 # +1
Lure Of Chaos 09.06.2012 21:45 # 0
но честно, за мои 10 лет программинга на жабе мне не приходилось так извращаться. то, что вы описываете, звучит, как задача на олимпиаде или вопрос на собеседовании, т.е. "а если вы в темном подвале, у вас нет компа и интернета, только ручка с бумагой, спросить не у кого, а вам завтра надо сдать проект - как поведет себя сборщик мусора сановской реализации в данных условиях? отвечать быстро, не раздумывая, смотреть в глаза!"
tir 09.06.2012 21:46 # 0
Lure Of Chaos 09.06.2012 21:49 # 0
tir 09.06.2012 21:51 # 0
Lure Of Chaos 09.06.2012 21:56 # 0
tir 09.06.2012 22:02 # 0
Почему они тупо String принимают?
Lure Of Chaos 09.06.2012 22:17 # 0
java.io.IOException: Object MyApp, logged as me@localhost:mypass, cannot find file "/tmp/tmp.tmp [rwxrwxrwx]"
вместо этого видим
java.io.IOException: file nound found
caused by
java.io.FileNotFoundException: cannot find file /tmp/tmp.tmp
и как ни странно, этого хватает, несмотря на то, что у нас нет всеобьемлющей инфы о состоянии системы на момент исключения
tir 09.06.2012 22:29 # 0
П.С. Не удивлюсь, если в вашем коде встречаеццо больше 2-х вызовов геттеров через точку =)
obj.getA().getB().doSomething90
Lure Of Chaos 09.06.2012 22:33 # 0
tir 09.06.2012 22:36 # 0
Lure Of Chaos 09.06.2012 22:42 # 0
tir 09.06.2012 22:49 # 0
скорее я имел ввиду:
user.getPassport().getPlaceOfBirth().get Country()
Lure Of Chaos 09.06.2012 22:55 # 0
вообще да, я так пишу, для разово встречающихся конструкций (избегаю "лишних" временных переменных), но если конструкция встречается более раза, то она сразу рефакторится в локальную (чаще finalную) переменную.
tir 09.06.2012 23:00 # 0
или если это нужно конкретно в конектсе условия, то
вызов нескольких геттеров увеличивает свзяанность системы
Lure Of Chaos 09.06.2012 23:06 # 0
tir 09.06.2012 23:06 # 0
Lure Of Chaos 09.06.2012 23:12 # 0
а так да, иногда встает вопрос, где должна находиться функциональность, имеющая отношение к двум модулям: в первом или втором? чаще ответ бывает: в третьем, новом, модуле.
bormand 09.06.2012 20:54 # 0
В нормальных IDE есть инструменты для подобного рефакторинга.
tir 09.06.2012 21:00 # 0
в какой IDE есть такой рефакторинг: заменить в классе у объектов определенного типа вызов одного метода на другой?
bormand 09.06.2012 21:33 # +1
tir 09.06.2012 21:37 # 0
+1
Lure Of Chaos 09.06.2012 21:41 # 0
tir 09.06.2012 21:43 # 0
Lure Of Chaos 09.06.2012 21:48 # 0
bormand 09.06.2012 21:57 # 0
Хотя, конечно, для чего-то кроме c++ и qt он малопригоден.
Lure Of Chaos 09.06.2012 22:05 # 0
Java - Idea, Eclipse,
Javascript - Idea
PHP, Ruby, Python - соотв. продукты от JetBrains или платная версия Ultimate для "все в одном"...
есть еще NetBeans для джавы, но его я давно перестал использовать, т.к. он остал по возможностям даже от еклипса...
wvxvw 10.06.2012 00:20 # +2
Lure Of Chaos 10.06.2012 00:30 # 0
roman-kashitsyn 09.06.2012 21:43 # +1
roman-kashitsyn 09.06.2012 21:08 # 0
Lure Of Chaos 09.06.2012 22:56 # 0
я ждал, но к этому так и не приблизились за всю дискуссию.
roman-kashitsyn 09.06.2012 11:39 # +2
когда нет возможности использовать guava, пишу аналогичный класс. Сокращается код, намерения становятся явными. А то, что в стек-трейс добавляется строчка вида Preconditions.checkInRange(...), мне не кажется проблемой.
Фабрика эксепшенов - это вроде как-то черезчур
tir 09.06.2012 11:45 # +1
guest 09.06.2012 14:21 # +1
Вот тут раздают расово-верные велосипеды:
http://code.google.com/p/guava-libraries/wiki/PreconditionsExplained
tir 09.06.2012 21:07 # 0
roman-kashitsyn 09.06.2012 23:29 # 0
tir 09.06.2012 23:40 # 0
вот, кстати, кто-то тоже делал
http://www.java2s.com/Open-Source/Java/CouchDB/ektorp/org/ektorp/util/Assert.java.htm
roman-kashitsyn 10.06.2012 00:17 # 0
tir 10.06.2012 12:05 # 0