ทำไมนักออกแบบ 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)
การมีวิธีการเหล่านี้ในเวอร์ชันที่ไม่คงที่เท่านั้นจะบังคับให้มีการตรวจสอบ Null อย่างชัดเจนไม่ว่าที่ใดก็ต้องเรียกใช้ ยกตัวอย่างเช่นเพียงแค่โทรexample = example.trim()
จะนำไปสู่NullPointerExceptionString example = null
ถ้า ดังนั้นโปรแกรมเมอร์จะต้องทำการตรวจสอบ boilerplate 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 อย่างชัดเจน การกลับมาเป็นโมฆะทำให้ฉันมีเหตุผลตั้งแต่จัดการกับสตริงnullควรส่งผลให้เป็นสตริงว่างไม่ใช่ข้อผิดพลาด
ทำไมนักออกแบบ Java ไม่คิดเรื่องนี้เมื่อพวกเขาออกแบบString
คลาสใน Java 1 หรือ Java 2 หรือแม้แต่เพิ่มฟังก์ชั่นดังกล่าวใน Java เวอร์ชันที่ใหม่กว่า?
null
เป็นสถานะพิเศษและควรได้รับการจัดการอย่างชัดเจน
Maybe<T>
ประเภทฉันเดา?
string name = employee?.personalData?.name
. เช่นเดียวกับทางลัดสำหรับif (employee != null)
s ซ้ำทั้งหมดเหล่านี้ คำถาม SO ที่เกี่ยวข้อง: stackoverflow.com/questions/1196031/…