String.format() принимает массив как один аргумент
Почему это работает нормально?:
String f = "Mi name is %s %s.";
System.out.println(String.format(f, "John", "Connor"));
И это не?:
String f = "Mi name is %s %s.";
System.out.println(String.format(f, (Object)new String[]{"John","Connor"}));
Если метод String.format принимает объект vararg?
Он компилируется в порядке, но когда я выполняю это, String.format() принимает объект vararg как единственный уникальный аргумент (значение toString() самого массива), поэтому он генерирует исключение MissingFormatArgumentException, поскольку оно не может соответствовать второй спецификатор строки (% s).
Как я могу заставить его работать?
Спасибо заранее, любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Используйте это: (я бы рекомендовал этот способ)
String f = "Mi name is %s %s.";
System.out.println(String.format(f, (Object[])new String[]{"John","Connor"}));
ИЛИ
String f = "Mi name is %s %s.";
System.out.println(String.format(f, new String[]{"John","Connor"}));
Но если вы используете этот способ, вы получите следующее предупреждение:
Аргумент типа String [] должен быть явно передан объекту [] для вызова формата метода varargs (String, Object...) из типа String. В качестве альтернативы он может быть передан объекту для вызова varargs
Ответ 2
Проблема заключается в том, что после трансляции в Object
компилятор не знает, что вы передаете массив. Попробуйте добавить второй аргумент (Object[])
вместо (Object)
.
System.out.println(String.format(f, (Object[])new String[]{"John","Connor"}));
Или просто не используйте приведение:
System.out.println(String.format(f, new String[]{"John","Connor"}));
(см. этот ответ для получения дополнительной информации.)