2012-07-18 48 views
10

为什么这样做的工作?:OK的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需要一个可变参数目的?

它编译好,但是当我执行这个String.format()将可变参数对象作为一个唯一的参数(数组本身的toString()值),所以它抛出一个MissingFormatArgumentException,因为它不能匹配第二个字符串说明符(%s)。

我该如何让它工作? 在此先感谢,任何帮助将不胜感激。

+0

不确定,但是您可以在不将字符串数组转换为对象的情况下进行检查吗? – 2012-07-18 05:51:21

回答

4

问题是在转换到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。)

+1

谢谢,它适用于Object [] cast。演员阵容对于避免编辑警告是必要的。再次感谢。 – mevqz 2012-07-18 06:02:44

+1

@Dragurne - 为了避免编译器警告和转换,你可以使用'new Object [] {“John”,“Connor”}'。 – 2012-07-18 06:16:54

12

使用此:(我会推荐这种方式)

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"})); 

但是,如果您使用这种方式,您将得到以下警告: 为了调用varargs方法格式(String,Object ...),应将String []类型的参数显式转换为Object []键入String。它也可以被转换为Object来进行可变参数调用

相关问题