Flash или Игровой Производитель для 2D игр. Единица для 3D игр.
Следует ли мне изменить строку кода или придерживаться текущей?
По словам вашего учителя, вы должны.
Возможно, он хочет, чтобы вы изучили разные подходы к одному и тому же.
Хотя в приведенном вами примере это не имеет особого смысла, оно было бы полезно при использовании других типов сообщений или для 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.
Так что, возможно, ваш учитель сообщает вам о ваших возможностях.
Способ учителя позволяет упростить локализацию, поскольку вы можете извлечь одну строку, а не несколько маленьких битов.
Но я не вижу смысла использовать MessageFormat в этой ситуации
В этой конкретной ситуации он не принесет вам многого. В общем, использование MessageFormat позволяет вынести эти сообщения в файл. Это позволяет:
Лично я бы придерживался метода конкатенации, но это всего лишь вопрос предпочтений. Некоторые думают, что проще написать строку с переменными как одну строку, а затем передать параметры в виде списка после строки. Чем больше переменных у вас в строке, тем больше смысла в использовании MessageFormat, но у вас есть только один, так что это не большая разница.
Конечно, если вам не нужна интернационализация, это накладные расходы, но в основном код, как того требует обучение, более "интернационализированный" (хотя на самом деле не интернационализирован, поскольку строка все еще жестко закодирована ).
Поскольку это обучающая ситуация, хотя он может делать это просто для того, чтобы показать вам, как использовать эти классы, а не как лучший способ программирования для этого конкретного примера.
С точки зрения наилучшего способа обучения программа, если интернационализация является требованием, вам нужно ее кодировать, если нет, то не делайте этого. Я просто добавляю накладные расходы и время (для написания кода) без всякой причины.
Обсудите другие ответы, важность MessageFormat для интернационализации заключается не только в том, что он упрощает создание внешнего файла.
Одно из преимуществ, которое я вижу в использовании MessageFormat
, заключается в том, что когда вы решите экстернализовать свои строки, будет намного проще создать сообщение, а также больше смысла видеть «Имя пользователя '{0}' не найдено!» в вашем файле ресурсов в виде одной строки, доступ к которой имеет только один идентификатор.