Лучший способ определить ошибочные коды/строки в Java?

Управление порядком табуляции (нажатие клавиши табуляции для перемещения фокуса) на странице.

Ссылка: http://www.w3.org/TR/html401/interact/forms .html # ч-17.11.1

114
задан William Brendel 15 January 2009 в 13:11
поделиться

6 ответов

Хорошо существует, конечно, лучшая реализация перечислимого решения (который обычно довольно хорош):

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 в стороне клиента...

153
ответ дан William Brendel 5 November 2019 в 09:18
поделиться

Что касается меня, я предпочитаю воплощать сообщения об ошибках в файлы свойств. Это будет действительно полезно в случае интернационализации Вашего приложения (один файл свойств на язык). Также легче изменить сообщение об ошибке, и этому не будет нужна никакая перекомпиляция источников 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 строк кода. Поэтому вообразите свой файл Перечисления, когда у Вас будут сотни ошибок справиться!

33
ответ дан abarisone 5 November 2019 в 09:18
поделиться

Перегрузка 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; }
}

кажется намного более чистым мне... и менее подробным.

20
ответ дан ctpenrose 5 November 2019 в 09:18
поделиться

В моем последнем задании я пошел немного глубже в перечислимой версии:

public enum Messages {
    @Error
    @Text("You can''t put a {0} in a {1}")
    XYZ00001_CONTAINMENT_NOT_ALLOWED,
    ...
}

@Error, @Info, @Warning сохраняются в файле класса и доступны во времени выполнения. (У нас было несколько других аннотаций, чтобы помочь описать доставку сообщений также)

, @Text является аннотацией времени компиляции.

я записал процессор аннотации для этого, которое сделало следующее:

  • Проверяют, что нет никаких дублирующихся номеров сообщения (часть перед первым подчеркиванием)
  • Проверка синтаксиса, текст сообщения
  • Генерирует messages.properties файл, который содержит текст, включенный перечислением значений.

я записал несколько обслуживающих процедур, которые помогли зарегистрировать ошибки, обернуть их как исключения (при желании) и т.д.

я пытаюсь заставить их позволять мне открытый исходный код это... - Scott

17
ответ дан Scott Stanchfield 5 November 2019 в 09:18
поделиться

Я (и остальная часть нашей команды в моей компании) предпочитаю повышать исключения вместо того, чтобы возвратить коды ошибки. Коды ошибки должны быть проверены везде, розданы и иметь тенденцию делать код нечитабельным, когда объем кода становится больше.

ошибочный класс тогда определил бы сообщение.

пз: и на самом деле также забота об интернационализации!
PPS: Вы могли также переопределить метод повышения и добавить вход, фильтруя и т.д. при необходимости (в средах эластина, где Классы исключений и друзья являются растяжимыми/изменяемыми)

1
ответ дан blabla999 5 November 2019 в 09:18
поделиться

Я рекомендовал бы смотреть на java.util. ResourceBundle. Необходимо заботиться о I18N, но это стоит того, даже если Вы не делаете. Воплощение сообщений является очень хорошей идеей. Я нашел, что было полезно быть в состоянии дать электронную таблицу бизнес-людям, которые позволили им вставлять точный язык, который они хотели видеть. Мы записали задачу Ant для генерации .properties файлов во время компиляции. Это делает I18N тривиальный.

, Если Вы также используете Spring, тем лучше. Их класс MessageSource полезен для этих видов вещей.

5
ответ дан duffymo 5 November 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: