web-dev-qa-db-ja.com

Java:コマンドライン引数がnullかどうかを確認

コマンドライン引数のエラーチェックを行いたい

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

ただし、これは境界外の配列の例外を返します。これは理にかなっています。適切な使用法を探しています。

80
Bobby S

引数をnullにすることはできません。彼らはただ存在しません。

つまり、引数の長さを確認する必要があります。

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

@jjnguyの答えは、ほとんどの状況で正しいです。アプリケーションを実行してnullを呼び出す場合、引数配列にnull文字列(またはmain配列)が表示されることはありません。通常の方法でコマンドラインから実行します。

ただし、アプリケーションの他の部分がmainメソッドを呼び出す場合、null引数またはnull引数配列を渡すことが考えられます。

ただし、(2)、これは明らかに非常に珍しいユースケースです。andこれは、mainエントリポイントメソッドの暗黙の契約に対する重大な違反です。したがって、nullmain引数値を確認する必要はないと思います。万が一それらが発生した場合、呼び出しコードがNullPointerExceptionを取得することは許容されます。結局、契約に違反することは呼び出し側のバグです。

15
Stephen C

この点を拡張するには:

Args変数自体がnullになる可能性がありますが、通常の実行ではできません。通常の実行では、Java.exeがコマンドラインからのエントリポイントとして使用されます。ただし、コンパイル済みのC++コードを使用してJNIでjvm.dllを使用し、Java.exeを完全にバイパスするプログラムを見てきました。この場合、NULLをmainメソッドに渡すことができます。この場合、argsはnullになります。

必要に応じて、if ((args == null) || (args.length == 0))またはif ((args != null) && (args.length > 0))を常に確認することをお勧めします。

9
Sean Crouse