Как обернуть Java String.format ()? - PullRequest
6 голосов
/ 06 июня 2010

Я хотел бы обернуть метод String.format () в свой собственный класс Logger. Я не могу понять, как передать аргументы из моего метода в String.format ().

public class Logger
{
    public static void format(String format, Object... args)
    {
         print(String.format(format, args)); // <-- this gives an error obviously.
    }

    public static void print(String s)
    {
         System.out.println(s);
    }
}

Ответы [ 2 ]

4 голосов
/ 06 июня 2010

Ваш код работает. Варарг - это более или менее просто синтаксический бокс варарга.

Другими словами, следующие два утверждения фактически идентичны:

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"}) приведет к тому, что массив будет рассматриваться как один объект (и в этом случае вызвать время выполнения ошибка будет выдана).

Если у вас все еще есть проблемы с вашим кодом, проверьте, действительно ли ваш пример идентичен тому, как работает ваш код.

1 голос
/ 06 июня 2010

Я думаю, что это будет работать:

печать (string.Format (формат, (Object []) арг));

Надеюсь, это работает. Я не проверял это. Удачи

...