Преимущества MessageFormat в Java

5
задан Ramon Marco L. Navarro 15 October 2009 в 04:38
поделиться

6 ответов

Следует ли мне изменить строку кода или придерживаться текущей?

По словам вашего учителя, вы должны.

Возможно, он хочет, чтобы вы изучили разные подходы к одному и тому же.

Хотя в приведенном вами примере это не имеет особого смысла, оно было бы полезно при использовании других типов сообщений или для i18n

Подумайте об этом:

String message = ResourceBundle.getBundle("messages").getString("user.notfound");

throw new UsernameNotFoundException(MessageFormat.format( message , new Object[] {username}));

У вас может быть messages_en.properties файл и messages_es.properties

Первый со строкой:

user.notfound=Username '{0}' not found!

И второй со строкой:

user.notfound=¡Usuario '{0}' no encontrado!

Тогда это будет иметь смысл.

Другое использование MessageFormat описано в doc

 MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}.");
 double[] filelimits = {0,1,2};
 String[] filepart = {"no files","one file","{0,number} files"};
 ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
 form.setFormatByArgumentIndex(0, fileform);

 int fileCount = 1273;
 String diskName = "MyDisk";
 Object[] testArgs = {new Long(fileCount), diskName};

 System.out.println(form.format(testArgs));

Результат с разными значениями для fileCount:

 The disk "MyDisk" contains no files.
 The disk "MyDisk" contains one file.
 The disk "MyDisk" contains 1,273 files.

Так что, возможно, ваш учитель сообщает вам о ваших возможностях.

18
ответ дан 18 December 2019 в 07:55
поделиться

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

1
ответ дан 18 December 2019 в 07:55
поделиться

Но я не вижу смысла использовать MessageFormat в этой ситуации

В этой конкретной ситуации он не принесет вам многого. В общем, использование MessageFormat позволяет вынести эти сообщения в файл. Это позволяет:

  • локализовать сообщения по языку
  • редактировать сообщения вне без изменение исходного кода
1
ответ дан 18 December 2019 в 07:55
поделиться

Лично я бы придерживался метода конкатенации, но это всего лишь вопрос предпочтений. Некоторые думают, что проще написать строку с переменными как одну строку, а затем передать параметры в виде списка после строки. Чем больше переменных у вас в строке, тем больше смысла в использовании MessageFormat, но у вас есть только один, так что это не большая разница.

0
ответ дан 18 December 2019 в 07:55
поделиться

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

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

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

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

0
ответ дан 18 December 2019 в 07:55
поделиться

Одно из преимуществ, которое я вижу в использовании MessageFormat , заключается в том, что когда вы решите экстернализовать свои строки, будет намного проще создать сообщение, а также больше смысла видеть «Имя пользователя '{0}' не найдено!» в вашем файле ресурсов в виде одной строки, доступ к которой имеет только один идентификатор.

0
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

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