web-dev-qa-db-fra.com

Java: vérifie si les arguments de ligne de commande sont nuls

Je cherche à faire une erreur de vérification pour mes arguments de ligne de commande

public static void main(String[] args)
{
    if(args[0] == null)
    {
        System.out.println("Proper Usage is: Java program filename");
        System.exit(0);
    }
}

Cependant, cela renvoie une exception tableau hors limites, ce qui est logique. Je cherche juste pour le bon usage.

80
Bobby S

Les arguments ne peuvent jamais être null. Ils n'existeront tout simplement pas.

En d'autres termes, ce que vous devez faire est de vérifier la longueur de vos arguments.

public static void main(String[] args)
{
    // Check how many arguments were passed in
    if(args.length == 0)
    {
        System.out.println("Proper Usage is: Java program filename");
        System.exit(0);
    }
}
144
jjnguy

La réponse de @ jjnguy est correcte dans la plupart des cas. Vous ne verrez jamais un null chaîne dans le tableau d'arguments (ou un tableau null.) Si main est appelé en exécutant l'application est exécutée à partir de la ligne de commande du manière normale.

Cependant, si une autre partie de l'application appelle une méthode main, il est concevable qu'elle puisse passer un argument null ou null.

Cependant (2), il s'agit clairement d'un cas d'utilisation très inhabituel, et il s'agit d'une violation flagrante du contrat implicite pour la méthode main d'entrée. Par conséquent, je ne pense pas que vous devriez vous donner la peine de vérifier les valeurs d'argument null dans main. Dans le cas peu probable où ils se produiraient, il serait acceptable que le code appelant reçoive un NullPointerException. Après tout, c’est un problème chez l’appelant de violer le contrat.

15
Stephen C

Pour développer ce point:

Il est possible que la variable args elle-même soit nulle, mais pas via une exécution normale. L'exécution normale utilisera Java.exe Comme point d'entrée à partir de la ligne de commande. Cependant, j'ai vu certains programmes qui utilisent le code C++ Compilé avec JNI pour utiliser le jvm.dll, En contournant complètement le fichier Java.exe. Dans ce cas, il est possible de passer NULL à la méthode principale, auquel cas les arguments seront nuls.

Je vous recommande de toujours vérifier if ((args == null) || (args.length == 0)) ou if ((args != null) && (args.length > 0)) en fonction de vos besoins.

9
Sean Crouse