Java에서 -D 매개 변수를 전달할 때 명령 행을 작성하고 코드에서 액세스하는 올바른 방법은 무엇입니까?
예를 들어, 나는 이런 식으로 글을 써 보았습니다 …
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
그리고 이렇게 부르면 …
java -jar myApplication.jar -Dtest="true"
그러나 NullPointerException이 발생합니다. 내가 뭘 잘못하고 있죠?
답변
문제는에 ‘-D’를 넣은 것 -jar
입니다. 이 시도:
java -Dtest="true" -jar myApplication.jar
명령 행 도움말에서 :
java [-options] -jar jarfile [args...]
다시 말해, 현재 가지고있는 방식 은 JVM 인수 대신 -Dtest="true"
전달할 인수 중 하나로 취급 됩니다 main
.
(당신은 아마한다 또한 따옴표를 삭제하지만, 잘 어쨌든 작동 할 수 -. 아마 쉘에 따라 다름)
답변
다음과 같아야합니다.
java -Dtest="true" -jar myApplication.jar
그런 다음 다음 값을 반환합니다.
System.getProperty("test");
그러나 값은 null
이므로 Boolean
다음을 사용하여 예외를 방지하십시오 .
boolean b = Boolean.parseBoolean( System.getProperty( "test" ) );
이 getBoolean
메소드는 시스템 특성 값을 위임하여 코드를 다음과 같이 단순화합니다.
if( Boolean.getBoolean( "test" ) ) {
// ...
}
답변
Java 대신 프로그램에 매개 변수를 제공하고 있습니다. 사용하다
java -Dtest="true" -jar myApplication.jar
대신에.
사용을 고려하십시오
"true".equalsIgnoreCase(System.getProperty("test"))
NPE를 피하기 위해. 그러나 항상 생각하지 않고 ” 요다 조건 “을 사용하지 마십시오 . 때로는 NPE를 던지는 것이 올바른 행동이며 때로는
System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true")
맞습니다 (기본 true 제공). 더 짧은 가능성은
!"false".equalsIgnoreCase(System.getProperty("test"))
그러나 이중 부정을 사용하지 않아도 오해하기가 어렵지 않습니다.