Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to wrap Java String.format()?

I would like to wrap the String.format() method with in my own Logger class. I can't figure a way how to pass arguments from my method to 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);
    }
}
like image 777
dvim Avatar asked Jun 06 '10 11:06

dvim


2 Answers

Your code works. The vararg is more or less simply a syntactic boxing of the vararg.

In other words,the following two statements are actually identical:

String.format("%s %s", "Foo", "Bar")
String.format("%s %s", new Object[] {"Foo", "Bar"})

Your args in your code will always be an Object[], no matter if you have 0, 1, 2 or any other number of arguments.

Note that this is determined at compile time and looks at the static type of the object, so String.format("%s %s", (Object)new Object[] {"Foo", "Bar"}) will cause the array to be treated as a single object (and in this case cause a runtime error to be thrown).

If you still have problems with your code, please check that your example really is identical to how your code works.

like image 78
Nuoji Avatar answered Sep 30 '22 12:09

Nuoji


I think this will work:

print(String.format(format, (Object[])args));

Hope it works. I have not tested it. Good luck

like image 41
nmquyet Avatar answered Sep 30 '22 10:09

nmquyet