- 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!");
Кроме того, юзабельность нулевая: что за параметр? какое было значение? какое должно было быть?
throw ParameterException("theName", value);
- надо описать класс
+ удобство вызова
+ стектрейс откуда надо
+ можно будет отлавливать это конкретное исключение, а не все исключения о кривом аргументе
Конечно же, это мое имхо, а не рекомендации вам.
Здесь тоже можно легко сменить тип, от которого порожден эксепшн, и добавить дополнительные поля. Так что функция под сомнением...
В идеале вообще можно было бы объявить функцию
но к сожалению, это будет не всегда применимо.
ЗАЧЕМ?
не проще ли логгер натравить на stderr (который System.err)?
як дiти (ц)
ну я не вижу проблем конструктору передавать объект со всеми необходимыми данными. можно даже перегрузить сколько надо раз для различных объектов.
просто не надо жабе пытаться привить функциональный стиль
а где-то в коде класса идут несколько вызовов
и тут вдруг потребовалось заменить user.getName() на user.getFullName().
при Вашем подходе требуется намного больше телодвижений, чем при моем.
П. С. Если Вы не ленивый человек и в совершенстве владете find/replace, то мы друг друга не поймем =)
опять же, где функция спасет?
а вообще да, пользуйтесь IDEшками и почаще рефакторите код, а не подставляйте странно выглядящие костыли.
и далее в коде писать
или вы сторонник везде в коде писать
т.е. я предлагаю ту же функцию createObject делать конструктором SomeObject
в каждом конкретном случае свои аргументы. иногда можно вообще varargs заюзать
но честно, за мои 10 лет программинга на жабе мне не приходилось так извращаться. то, что вы описываете, звучит, как задача на олимпиаде или вопрос на собеседовании, т.е. "а если вы в темном подвале, у вас нет компа и интернета, только ручка с бумагой, спросить не у кого, а вам завтра надо сдать проект - как поведет себя сборщик мусора сановской реализации в данных условиях? отвечать быстро, не раздумывая, смотреть в глаза!"
Почему они тупо String принимают?
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
и как ни странно, этого хватает, несмотря на то, что у нас нет всеобьемлющей инфы о состоянии системы на момент исключения
П.С. Не удивлюсь, если в вашем коде встречаеццо больше 2-х вызовов геттеров через точку =)
obj.getA().getB().doSomething90
скорее я имел ввиду:
user.getPassport().getPlaceOfBirth().get Country()
вообще да, я так пишу, для разово встречающихся конструкций (избегаю "лишних" временных переменных), но если конструкция встречается более раза, то она сразу рефакторится в локальную (чаще finalную) переменную.
или если это нужно конкретно в конектсе условия, то
вызов нескольких геттеров увеличивает свзяанность системы
а так да, иногда встает вопрос, где должна находиться функциональность, имеющая отношение к двум модулям: в первом или втором? чаще ответ бывает: в третьем, новом, модуле.
В нормальных IDE есть инструменты для подобного рефакторинга.
в какой IDE есть такой рефакторинг: заменить в классе у объектов определенного типа вызов одного метода на другой?
+1
Хотя, конечно, для чего-то кроме c++ и qt он малопригоден.
Java - Idea, Eclipse,
Javascript - Idea
PHP, Ruby, Python - соотв. продукты от JetBrains или платная версия Ultimate для "все в одном"...
есть еще NetBeans для джавы, но его я давно перестал использовать, т.к. он остал по возможностям даже от еклипса...
я ждал, но к этому так и не приблизились за всю дискуссию.
когда нет возможности использовать guava, пишу аналогичный класс. Сокращается код, намерения становятся явными. А то, что в стек-трейс добавляется строчка вида Preconditions.checkInRange(...), мне не кажется проблемой.
Фабрика эксепшенов - это вроде как-то черезчур
Вот тут раздают расово-верные велосипеды:
http://code.google.com/p/guava-libraries/wiki/PreconditionsExplained
вот, кстати, кто-то тоже делал
http://www.java2s.com/Open-Source/Java/CouchDB/ektorp/org/ektorp/util/Assert.java.htm