2010-01-08 76 views
1
/** 
* Testing Arrays 
* @author N002213F 
* @version 1.0 
*/ 
public class JavaArrays { 

    public void processNames(String[] arg) { 
     //-- patented method, stop, do not read ;) 
    } 

    public void test() { 

     // works fine 
     String[] names1 = new String[] { "Jane", "John" }; 
     processNames(names1); 

     // works fine, nothing here 
     String[] names2 = { "Jane", "John" }; 
     processNames(names2); 

     // works again, please procced 
     processNames(new String[] { "Jane", "John" }); 

     // fails, why, are there any reasons? 
     processNames({ "Jane", "John" }); 

     // fails, but i thought Java 5 [vargs][1] handles this 
     processNames("Jane", "John"); 
    } 
} 

回答

9
processNames({ "Jane", "John" }); 

这失败了,为什么,还有什么原因?

您没有指定类型。 Java在这里不会进行类型推断;它希望你指定这是一个字符串数组。到this question的答案可以帮助这也

processNames("Jane", "John"); 

这也失败,但我认为Java 5个的可变参数处理这个

如果你想可变参数,那么你应该写你的方法,例如:

public void processNames(String... arg) 

注意...而不是[]。只接受一个数组并不能让你在该方法上使用可变参数。

1

在最后一行:processNames(String ...args);必须写入像这样的可变参数才能工作。

0

第三次调用是不正确的,因为你不能像这样创建一个数组,你像在第二次调用时那样做。如果您希望最终通话成功,您必须将processNames声明为可变参数接收器(see here