为什么这样可以正常工作?:
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)。
我怎样才能让它发挥作用? 在此先感谢,任何帮助将不胜感激。
答案 0 :(得分:14)
使用此:(我建议这样做)
String f = "Mi name is %s %s.";
System.out.println(String.format(f, (Object[])new String[]{"John","Connor"}));
OR
String f = "Mi name is %s %s.";
System.out.println(String.format(f, new String[]{"John","Connor"}));
但如果您使用这种方式,您将收到以下警告: String []类型的参数应该显式地转换为Object [],以便从String类型调用varargs方法格式(String,Object ...)。也可以将其转换为Object以进行varargs调用
答案 1 :(得分:5)
问题是在转换为Object
之后,编译器不知道您正在传递数组。尝试将第二个参数转换为(Object[])
而不是(Object)
。
System.out.println(String.format(f, (Object[])new String[]{"John","Connor"}));
或者根本不使用演员:
System.out.println(String.format(f, new String[]{"John","Connor"}));
(有关详细信息,请参阅this answer。)