Ваш код работает. Варарг - это более или менее просто синтаксический бокс варарга.
Другими словами, следующие два утверждения фактически идентичны:
String.format("%s %s", "Foo", "Bar")
String.format("%s %s", new Object[] {"Foo", "Bar"})
Ваш args
в вашем коде будет всегда быть Object[]
, независимо от того, есть ли у вас 0, 1, 2 или любое другое количество аргументов.
Обратите внимание, что это определяется в время компиляции и учитывает статический тип объекта, поэтому String.format("%s %s", (Object)new Object[] {"Foo", "Bar"})
приведет к тому, что массив будет рассматриваться как один объект (и в этом случае вызвать время выполнения ошибка будет выдана).
Если у вас все еще есть проблемы с вашим кодом, проверьте, действительно ли ваш пример идентичен тому, как работает ваш код.