2010-01-08 8 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"); 
    } 
} 

Répondre

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

Cela échoue, pourquoi y at-il des raisons?

Vous n'avez pas spécifié de type. Java ne fait pas d'inférence de type ici; il s'attend à ce que vous spécifiez qu'il s'agit d'un tableau de chaînes. Les réponses à this question peuvent aider pour cela, trop

processNames("Jane", "John"); 

Cela échoue aussi, mais je pensais que les poignées Java 5 varargs cette

Si vous voulez varargs, alors vous devriez écrire votre méthode en tant que telle :

public void processNames(String... arg) 

Notez le ... au lieu de []. Le simple fait d'accepter un tableau ne vous autorise pas à utiliser varargs sur cette méthode.

1

Sur votre dernière ligne: processNames(String ...args); doit être écrit comme ceci pour que varargs fonctionne.

0

Le troisième appel est incorrect car vous ne pouvez pas créer un tableau comme cela, vous le faites comme dans le second appel. Si vous voulez que l'appel final réussisse, vous devez déclarer processNames comme étant un destinataire de varargs (see here)