#exception #casting #classcastexception
#исключение #Кастинг #classcastexception
Вопрос:
Я просто играю с MessageFormat, но когда я пытаюсь передать строку в метод format MessageFormat, он компилируется нормально, но затем я получаю исключение classcast во время выполнения. Вот код.
MessageFormat format = new MessageFormat("");
Object obj = Integer.toHexString(10);
format.format(obj);
Теперь исключение во время выполнения, которое я получаю, выглядит следующим образом.
Исключение в потоке «main» java.lang.Исключение ClassCastException: java.lang.Строка не может быть преобразована в [Ljava.lang.Объект; в java.text.MessageFormat.format (неизвестный источник) в java.text.Format.format(неизвестный источник) в JavaCore2.Codepoint.main (Codepoint.java:21)
Ответ №1:
MessageFormat.format()
принимает аргумент типа Object[]
( Object
массив), тогда как вы передаете один Object
аргумент.
Вам придется создать массив из вашего Integer
:
MessageFormat format = new MessageFormat("{0}");
Object[] args = { Integer.toHexString(10) };
String result = format.format(args);
Комментарии:
1. Это правильный ответ в javadoc четко указано, что формат с одним аргументом (obj)
is equivalent to format(obj, new StringBuffer(), new FieldPosition(0)).toString();
который, в свою очередь (если вы перейдете к другому javadoc) эквивалентен аргументам format((Object[]), результату, pos). Какие приятные люди работают в Oracle!2. Согласен. Это доставает меня каждый раз.