Управление порядком табуляции (нажатие клавиши табуляции для перемещения фокуса) на странице.
Ссылка: http://www.w3.org/TR/html401/interact/forms .html # ч-17.11.1
Хорошо существует, конечно, лучшая реализация перечислимого решения (который обычно довольно хорош):
public enum Error {
DATABASE(0, "A database error has occured."),
DUPLICATE_USER(1, "This user already exists.");
private final int code;
private final String description;
private Error(int code, String description) {
this.code = code;
this.description = description;
}
public String getDescription() {
return description;
}
public int getCode() {
return code;
}
@Override
public String toString() {
return code + ": " + description;
}
}
можно хотеть переопределить toString (), чтобы просто возвратить описание вместо этого - не уверенный. Так или иначе основной момент - то, что Вы не должны переопределять отдельно для каждого кода ошибки. Также обратите внимание, что я явно определил код вместо того, чтобы использовать порядковый номер - это облегчает изменять порядок и добавлять/удалять ошибки позже.
не забывают, что это не интернационализируется вообще - но если Ваш клиент веб-сервиса не отправляет Вам описание локали, Вы не можете легко интернационализировать его сами так или иначе. По крайней мере, у них будет код ошибки для использования для i18n в стороне клиента...
Что касается меня, я предпочитаю воплощать сообщения об ошибках в файлы свойств. Это будет действительно полезно в случае интернационализации Вашего приложения (один файл свойств на язык). Также легче изменить сообщение об ошибке, и этому не будет нужна никакая перекомпиляция источников Java.
На моих проектах, обычно у меня есть интерфейс, который содержит ошибочные коды (Строка или целое число, она не заботится очень), который содержит ключ в файлах свойств для этой ошибки:
public interface ErrorCodes {
String DATABASE_ERROR = "DATABASE_ERROR";
String DUPLICATE_USER = "DUPLICATE_USER";
...
}
в файле свойств:
DATABASE_ERROR=An error occurred in the database.
DUPLICATE_USER=The user already exists.
...
Другой проблемой с Вашим решением является maintenability: у Вас есть только 2 ошибки, и уже 12 строк кода. Поэтому вообразите свой файл Перечисления, когда у Вас будут сотни ошибок справиться!
Перегрузка toString () кажется немного неприглядной - который кажется чем-то вроде фрагмента toString () нормальная эксплуатация.
Что относительно:
public enum Errors {
DATABASE(1, "A database error has occured."),
DUPLICATE_USER(5007, "This user already exists.");
//... add more cases here ...
private final int id;
private final String message;
Errors(int id, String message) {
this.id = id;
this.message = message;
}
public int getId() { return id; }
public String getMessage() { return message; }
}
кажется намного более чистым мне... и менее подробным.
В моем последнем задании я пошел немного глубже в перечислимой версии:
public enum Messages {
@Error
@Text("You can''t put a {0} in a {1}")
XYZ00001_CONTAINMENT_NOT_ALLOWED,
...
}
@Error, @Info, @Warning сохраняются в файле класса и доступны во времени выполнения. (У нас было несколько других аннотаций, чтобы помочь описать доставку сообщений также)
, @Text является аннотацией времени компиляции.
я записал процессор аннотации для этого, которое сделало следующее:
я записал несколько обслуживающих процедур, которые помогли зарегистрировать ошибки, обернуть их как исключения (при желании) и т.д.
я пытаюсь заставить их позволять мне открытый исходный код это... - Scott
Я (и остальная часть нашей команды в моей компании) предпочитаю повышать исключения вместо того, чтобы возвратить коды ошибки. Коды ошибки должны быть проверены везде, розданы и иметь тенденцию делать код нечитабельным, когда объем кода становится больше.
ошибочный класс тогда определил бы сообщение.
пз: и на самом деле также забота об интернационализации!
PPS: Вы могли также переопределить метод повышения и добавить вход, фильтруя и т.д. при необходимости (в средах эластина, где Классы исключений и друзья являются растяжимыми/изменяемыми)
Я рекомендовал бы смотреть на java.util. ResourceBundle. Необходимо заботиться о I18N, но это стоит того, даже если Вы не делаете. Воплощение сообщений является очень хорошей идеей. Я нашел, что было полезно быть в состоянии дать электронную таблицу бизнес-людям, которые позволили им вставлять точный язык, который они хотели видеть. Мы записали задачу Ant для генерации .properties файлов во время компиляции. Это делает I18N тривиальный.
, Если Вы также используете Spring, тем лучше. Их класс MessageSource полезен для этих видов вещей.