Ketika melewati parameter -D di Java, apa cara yang tepat untuk menulis baris perintah dan kemudian mengaksesnya dari kode?
Misalnya, saya sudah mencoba menulis sesuatu seperti ini ...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
Dan kemudian menyebutnya seperti ini ...
java -jar myApplication.jar -Dtest="true"
Tapi saya menerima NullPointerException. Apa yang saya lakukan salah?
java
command-line
parameters
Ryan Berger
sumber
sumber
compareToIgnoreCase
alih-alihequalsIgnoreCase
untuk pengidentifikasi lokal-agnostik; jika tidak, Anda dapat mengalami masalah empat-Turki, antara lain.Jawaban:
Saya menduga masalahnya adalah Anda telah meletakkan "-D" setelah tanda
-jar
. Coba ini:Dari bantuan baris perintah:
Dengan kata lain, cara Anda mendapatkannya saat ini akan memperlakukan
-Dtest="true"
sebagai salah satu argumen untuk diteruskanmain
alih-alih sebagai argumen JVM.(Anda mungkin juga harus memberikan tanda kutip, tetapi mungkin juga bisa berhasil - itu mungkin tergantung pada shell Anda.)
sumber
Itu harus:
Maka yang berikut akan mengembalikan nilainya:
Namun, nilainya bisa
null
jadi waspada terhadap pengecualian menggunakanBoolean
:Perhatikan bahwa
getBoolean
metode ini mendelegasikan nilai properti sistem, menyederhanakan kode untuk:sumber
Integer.getInteger("test"); Long.getLong("test")
dengan asumsi Anda memiliki-Dtest=123
Sebagai gantinya, Anda memberikan parameter ke program Anda ke Java. Menggunakan
sebagai gantinya.
Pertimbangkan untuk menggunakan
untuk menghindari NPE. Tapi jangan gunakan " kondisi Yoda " selalu tanpa berpikir, kadang-kadang melempar NPE adalah perilaku yang benar dan kadang-kadang sesuatu seperti
benar (memberikan standar yang benar). Kemungkinan yang lebih pendek adalah
tetapi tidak menggunakan negasi ganda tidak membuatnya lebih sulit untuk disalahpahami.
sumber
System.getProperty("test", "true").equalsIgnoreCase("true")
akan menjadi cara yang lebih baik untuk menulis kondisi terakhir.Boolean.getBoolean("test");
adalah pilihan lain. Lihat .