Java 디자이너 가 java.lang.String
클래스 에서 정적 버전의 문자열 조작 메소드를 작성 하지 않은 이유는 무엇 입니까? 다음 메소드는 내가 참조하는 것이지만 클래스의 다른 비 정적 메소드로도 질문을 확장 할 수 있습니다.
concat(String) substring(int, int)
replace(char, char) toLowerCase()
replace(CharSequence, CharSequence) toLowerCase(Locale)
replaceAll(String, String) toString()
replaceFirst(String, String) toUpperCase()
split(String) toUpperCase(Locale)
split(String, int) trim()
substring(int)
이러한 메소드의 비 정적 버전 만 있으면 이러한 메소드 를 호출해야하는 곳에서 명시 적으로 널 검사를 수행합니다. 예를 들어 단순히 호출 example = example.trim()
하면 NullPointerException if이됩니다 String example = null
. 따라서 프로그래머는 다음 상용구 null 확인을 수행해야합니다.
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
String
이 메소드의 정적 버전 (아마도 독점적 인 ) 이 있으면 입력 문자열을 첫 번째 인수로 사용하는 것이 훨씬 편리했을 것입니다.
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
이로 인해 프로그래머가 명시 적으로 null 사례를 처리하도록 강요하는 대신 단순히 null을 반환하여 null 사례를 자동으로 처리하는보다 깔끔한 코드가 프로그래머에 의해 작성되었습니다. 널의 반환은 조작 이후 나에게 의미가 널 A의 결과를해야 문자열을 널 문자열이 아닌 오류입니다.
Java 설계자 String
가 Java 1 또는 Java 2로 클래스를 설계 하거나 이후 Java 버전에서 이러한 기능을 추가 할 때 이것을 생각 하지 않은 이유는 무엇 입니까?
null
예외적 인 상태이며 명시 적으로 처리해야합니다.
Maybe<T>
유형의 재 구현이 좋지 않습니다 .
string name = employee?.personalData?.name
. 이 모든 반복적 인 것들에 대한 지름길과 같습니다 if (employee != null)
. 관련 SO 질문 : stackoverflow.com/questions/1196031/...