/**
* 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
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.
Sur votre dernière ligne: processNames(String ...args);
doit être écrit comme ceci pour que varargs fonctionne.
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)