Tại sao các nhà thiết kế Java không tạo các phiên bản tĩnh của các phương thức thao tác chuỗi trong java.lang.String
lớp? Các phương thức sau đây là những gì tôi đề cập đến, nhưng câu hỏi có thể được mở rộng sang các phương thức không tĩnh khác trong lớp.
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)
Chỉ có các phiên bản không tĩnh của các phương thức này buộc phải kiểm tra null rõ ràng ở bất cứ nơi nào phương thức như vậy phải được gọi. Ví dụ, chỉ cần gọi example = example.trim()
sẽ dẫn đến NullPulumException nếu String example = null
. Vì vậy, lập trình viên phải thực hiện kiểm tra null bảng kê sau:
if (example != null)
example = example.trim();
// OR:
example = (example==null) ? null : example.trim();
example = (example==null) ? null : example.substring(5);
Tôi sẽ tưởng tượng nó sẽ thuận tiện hơn rất nhiều nếu String
có các phiên bản tĩnh của các phương thức này (có lẽ là độc quyền ), sẽ lấy chuỗi đầu vào làm đối số đầu tiên:
example = String.trim(example);
example = String.replace(example, 'a', 'b');
example = String.substring(example, 5);
Điều này sẽ dẫn đến mã sạch hơn được viết bởi các lập trình viên, họ sẽ tự động xử lý các trường hợp null bằng cách trả về null, thay vì buộc các lập trình viên xử lý rõ ràng các trường hợp null. Việc trả về null có ý nghĩa với tôi vì việc thao tác một chuỗi null sẽ dẫn đến một chuỗi null , không phải là một lỗi.
Tại sao các nhà thiết kế Java không nghĩ về điều này khi họ thiết kế String
lớp trong Java 1 hoặc Java 2 hoặc thậm chí thêm chức năng như vậy trong phiên bản Java sau này?
null
là một trạng thái đặc biệt và nên được xử lý rõ ràng.
Maybe<T>
loại, tôi đoán vậy?
string name = employee?.personalData?.name
. Chỉ là một phím tắt cho tất cả các if (employee != null)
s lặp đi lặp lại . Câu hỏi SO liên quan: stackoverflow.com/questions/1196031/