StringUtils.EMPTY
대신 사용 ""
합니까?
반환 값으로 또는 String 변수의 값을 설정하는 경우를 의미합니다. 비교를 의미하지는 않습니다.StringUtils.isEmpty()
답변:
당연히 아니지. 정말로 ""가 충분히 명확하지 않다고 생각하십니까?
상수에는 기본적으로 3 가지 사용 사례가 있습니다.
여기에는 적용되지 않습니다.
EMPTY
은 빈 문자열 자체에 아직없는 의미가 없습니다. 특히, 특정 경우에 빈 문자열을 사용하기로 결정한 이유 를 문서화하지 않습니다 . 상수에 이름을 지정 ONE
하고 값 대신 해당 상수를 사용하는 것이 중요하다고 가정 하는 것과 다르지 않습니다 .
나는 StringUtils.EMPTY
리터럴을 숨기고 return StringUtils.EMPTY
완전히 예상했던 것을 표현 하고 빈 문자열을 반환해야 한다는 것을 표현 ""
하기 위해를 사용하면 ""
쉽게 다른 것으로 변경 될 수 있고 이것은 아마도 실수 일 수 있다는 가정으로 이어질 수 있습니다. EMPTY
더 표현력이 있다고 생각합니다 .
StringUtils.EMPTY
적은 보다는 표현 ""
.
""
를 사용하는 것보다 표현력이 더 뛰어나다는 것을 알게 되었으며 StringUtils.EMPTY
, 당신이 말한 것이 그것에 대해 제 마음을 바꾸지 않았습니다. 개발자가 빈 문자열 리터럴을 아주 가끔 잘못 작성했다고 믿을 수 있습니다. 하지만 저는 백만 분의 1에 해당하는 문자열 리터럴의 명확성을 취할 것입니다 (테스트에서 쉽게 찾을 수 있기를 바랍니다 ... ) 버그, 개인적으로.
얼마나 많은 사람들이 ""가 실제로 빈 문자열이고 유니 코드의 눈에 띄지 않고 공백이없는 멋진 문자를 포함하지 않는다고 맹목적으로 가정하는 것에 대해 놀랐습니다. 선하고 품위있는 모든 것에 대한 사랑을 위해 가능할 때마다 EMPTY를 사용하십시오.
String
인턴 과 클래스 초기화에 대해 얘기하는 사람이 아무도 없기 때문에 여기에 2 센트를 추가하겠습니다 .
String
자바 소스에서 리터럴은 구금하고 있습니다 어떤 ""
및 같은 객체StringUtils.EMPTY
StringUtils.EMPTY
를 초기화 할 수 있습니다 (JLS는 해당 지점에서 특정적임). 그러나 이며 이 클래스를 초기화하지 않도록, 마지막.StringUtils
EMPTY
final
org.apache.commons.lang3.StringUtils.EMPTY
JLS 12.4.1을 참조하여 String interning 및 Class 초기화 에 대한 관련 답변을 참조하십시오 .
StringUtils
.
. return "";
보다 짧기 때문에 나는 그것을 사용하고 싶지 않습니다 return StringUtils.EMPTY
.
그러나 이것을 사용하는 한 가지 잘못된 이점은 return " ";
대신 입력 return "";
하면 다른 동작이 발생할 수 있다는 것입니다 (빈 문자열을 올바르게 테스트하는지 여부와 관련하여).
""
또한 좋아하지 않는다 . 나는 같은 리터럴 문자열을 한 번 이상, 심지어 한 번만 입력하는 것을 싫어한다. 차라리 Constants.java 에서 상수를 선언하고 싶지만 소스 코드의 모든 곳에서 반복하지는 않습니다.
return "";
것을 선호 합니다 . StringUtil.EMPTY
당신의 클래스가 커먼즈의 다른 것을 사용하지 않는다면,이 마법의 가치를 위해이 의존성을 갖는 것은 유감입니다.
StringUtils의 디자이너는이 상수를 많이 사용하며 이것이 올바른 일이지만 그렇다고해서 반드시 사용해야한다는 의미는 아닙니다.
솔직히 나도 많이 사용하지 않는다. 빈 문자열과 비교하려면 다음을 사용하십시오.StringUtils.isNotEmpty(..)
StringUtils.isNotEmpty(..)
또한 nullcheck를 수행하므로 빈 문자열과 비교하는 것과 정확히 동일하지 않습니다.
null
하시겠습니까? 의 두 번째 인수로 equals
하지만 결과는 동일합니다false
isNotEmpty
의 반대이다 "".equals(…)
, 따라서,이 치료는 사실 null
빈 문자열이 같은 입니다 빈 문자열과 비교하여 서로 다른 "".equals("")
→ true
, "".equals(null)
→ false
, StringUtils.isNotEmpty("")
→ false
, StringUtils.isNotEmpty(null)
→ false
. 문자열이 비어 있는지 여부 만 알고 싶다면를 사용하십시오. 이것은 빈 문자열 이면 반환하고 문자열이 다음 과 같으면 a를 던지는 string.isEmpty()
올바른 동작 이 있습니다 .true
NullPointerException
null
StringUtils.EMPTY
가독성을 위해 어떤 경우에는 유용하다고 생각 합니다. 특히 :
삼항 연산자 예.
item.getId() != null ? item.getId() : StringUtils.EMPTY;
또한 상수를 사용하여에 대한 참조 StringUtils.EMPTY
가 생성됩니다. 그렇지 않으면 ""
JVM이 문자열 풀에 이미 존재하는지 확인해야 할 때마다 문자열 리터럴을 인스턴스화하려고 시도하면 추가 인스턴스 생성 오버 헤드가 없습니다. 확실히 사용 StringUtils.EMPTY
하면 문자열 풀을 확인할 필요가 없습니까?
StringUtils.EMPTY
상수는 컴파일 타임에 해결 된다고 언급되어 있습니다.
StringUtil.EMPTY
컴파일 시간 상수이고, 그 참조를 사용하는 것과 똑같은 바이트 코드로 컴파일 얻는다 ""
직접. 또한 삼항 연산자가 차이를 만들어야하는 이유를 알 수 없습니다. 다른 것과 같은 표현입니다. 명명 된 상수를 사용하거나 사용하지 않는 이유는 삼항 연산자에도 적용됩니다.
아니, 쓸 게 더 많아서 그리고 빈 문자열은 플랫폼 독립적 인 비어 있습니다 (Java에서).
File.separator
"/"또는 "\"보다 낫습니다.
하지만 원하는대로하십시오. 다음과 같은 오타를 얻을 수 없습니다.return " ";
someString.isEmpty()
대신 쓰는 이유 입니다.
예, 말이됩니다. 이것이 유일한 방법은 아닐 수도 있지만 "말이 안 돼"라고 말하는 방식은 거의 보이지 않습니다.
제 생각에는 :
It will still require changing everywhere if you don't define your own variable and use it in multiple places.
빈 문자열을 다른 빈 문자열로 변경 하시겠습니까?
StringUtils.EMPTY
. 빈 문자열의 사용이 의도 된 것이지 어떤 종류의 게으름이 아님을 분명히합니다 ( "오, 문자열이 필요합니다""
. 전달합시다 "). 누군가이 코드를 치면 변경하기 전에 두 번 생각할 것입니다. 또한를StringUtils.EMPTY
자신의 변수로 정의한 경우MyClass.EMPTY
"빈 표현"을 변경하려면 코드 한 줄을 변경해야합니다. 예를 들어"<empty>"
빈 String 대신로 변경할 수""
있습니다. 그러나 나는 이것이 너무 멀리 가고 있다고 생각합니다.