Исключение ClassCastException при преобразовании из строки в объект.. почему?

#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. Согласен. Это доставает меня каждый раз.