Le type de paramètre variable dans les méthodes Java est un concept très important et a une très large gamme d'applications. Cet article analyse cela sous forme d’exemples. Les détails sont les suivants :
De manière générale, lorsque de nombreux débutants Java verront le code suivant, ils se poseront une question : Quels sont les trois petits points de la méthode dealArray ?
public class TestVarArgus { public static void dealArray(int... intArray){ } public static void main(String args[]){ } }
C'est ce dont cet article va discuter : les types de paramètres variables, également appelés types de paramètres indéfinis. L'abréviation anglaise est varargus, qui signifie type d'argument variable. Il ressort facilement de son nom que lorsque cette méthode reçoit des paramètres, le nombre est variable. Bon, appelons maintenant cette méthode. Veuillez regarder le code et la sortie :
public class TestVarArgus { public static void dealArray(int... intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ dealArray(); dealArray(1); dealArray(1, 2, 3); } }
Sortie :
1
1 2 3
Vous pouvez voir ce paramètre variable via l'appel dans le fichier principal méthode Il peut soit n'avoir aucun paramètre (paramètres vides), soit être de longueur variable. Tous ceux qui verront cela comprendront probablement que ce paramètre de longueur variable est en fait assez similaire à un paramètre de tableau. En fait, c’est effectivement le cas. Le compilateur convertira silencieusement ce dernier paramètre formel en paramètre de tableau et mettra une marque dans le fichier de classe compilé pour indiquer qu'il s'agit d'une méthode avec un nombre variable de paramètres réels. Veuillez regarder le code :
dealArray(); //dealArray(int[] intArray{}); dealArray(1); //dealArray(int[] intArray{1}); dealArray(1, 2, 3); //dealArray(int[] intArray{1, 2, 3});
Cela dit, vous pouvez le vérifier pour voir si ce paramètre variable est un paramètre de classe tableau ? Regardez le code :
public class TestVarArgus { public static void dealArray(int... intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void dealArray(int[] intArray){//会有Duplicate method dealArray(int[]) in type TestVarArgus的错误 for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ dealArray(); dealArray(1); dealArray(1, 2, 3); } }
Comme le montre le code ci-dessus, ces deux méthodes sont en conflit et ne peuvent pas être surchargées. Ici, faisons une autre expérience intéressante :
Code 1 :
public class TestVarArgus { public static void dealArray(int... intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ int[] intArray = {1, 2, 3}; dealArray(intArray); //通过编译,正常运行 } }
Code 2 :
public class TestVarArgus { public static void dealArray(int[] intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ dealArray(1, 2, 3); //编译错误 } }
Comme le montrent les deux morceaux de code ci-dessus, les paramètres variables sont compatibles avec les paramètres de classe tableau, mais les paramètres de classe tableau ne sont pas compatibles avec les paramètres variables. En fait, pour le deuxième morceau de code, le compilateur ne sait pas ce qui est mutable et immuable. Selon lui, il doit définir une méthode de la classe dealArray(int, int, int). Par conséquent, il est naturellement impossible de faire correspondre la méthode dealArray des paramètres de classe de tableau.
Puisque la méthode Java reçoit des paramètres variables, jetons un œil au code suivant :
public class TestVarArgus { public static void dealArray(int count, int... intArray){ } public static void dealArray(int... intArray, int count){//编译报错,可变参数类型应该作为参数列表的最后一项 } public static void main(String args[]){ } }
Ce code illustre que, le type de paramètre variable doit être le dernier élément de la liste des paramètres et ne peut pas être placé devant le paramètre de longueur fixe. Vous pensez probablement au mot « priorité ». Parce qu'il n'y a pas d'explication exacte, c'est juste une telle règle. Vous pouvez utiliser le mot « priorité » pour la comprendre ici. Veuillez regarder le code suivant :
public class TestVarArgus { public static void dealArray(int... intArray){ System.out.println("1"); } public static void dealArray(int count, int count2){ System.out.println("2"); } public static void main(String args[]){ dealArray(1, 2); } }