Ví dụ chúng ta có thể xây dựng một mảng như thế này:Sử dụng mảng các số không dài
new ElementType[0];
Tôi nhìn thấy một cấu trúc như vậy, nhưng tôi không hiểu tại sao điều này có thể có ích.
Ví dụ chúng ta có thể xây dựng một mảng như thế này:Sử dụng mảng các số không dài
new ElementType[0];
Tôi nhìn thấy một cấu trúc như vậy, nhưng tôi không hiểu tại sao điều này có thể có ích.
Ví dụ. Giả sử bạn có chức năng
public String[] getFileNames(String criteria) {
để lấy một số tên tệp. Hãy tưởng tượng rằng bạn không tìm thấy bất kỳ tên tập tin nào đáp ứng tiêu chuẩn. Bạn quay trở lại cái gì? Bạn có 2 lựa chọn - hoặc trả về null hoặc mảng 0 có kích thước.
Các biến thể với 0 cỡ mảng là tốt hơn, vì người gọi của bạn không cần phải kiểm tra cho NULL và có thể xử lý mảng theo một cách nhất quán - nói, trong một vòng lặp (mà sẽ có sản phẩm nào trong trường hợp này).
Có một chương về vấn đề này trong Effective Java, Item 27
Để chắc chắn: nếu mã có nghĩa là được sử dụng trên "lớp thấp hơn", 'null' là cách hiệu quả hơn. Cũng xem đoạn thứ 3 của https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained – Pacerier
Dễ dàng hơn khi làm việc với hơn null
trong nhiều trường hợp, trong đó null
là lựa chọn hiển nhiên.
Giả sử bạn muốn trả lại Iterable<String>
chứa (nói) danh sách tên tệp có liên quan ... nhưng không có lý do nào. Bạn có thể trả lại null
để cho biết điều đó, nhưng sau đó người gọi phải đặc biệt trong trường hợp đó. Thay vào đó, nếu bạn quay lại một bộ sưu tập sản phẩm nào, người gọi vẫn có thể sử dụng một tăng cường cho vòng lặp:
for (String file : getFiles())
Vậy tại sao sử dụng một mảng trống thay vì một sản phẩm nào ArrayList
hoặc một cái gì đó tương tự? Mảng là một kích thước cố định, vì vậy một mảng trống có hiệu quả bất biến. Điều đó có nghĩa là bạn có thể giữ một giá trị duy nhất và trả lại cho bất cứ ai bạn thích, biết rằng họ không thể làm bất cứ điều gì với nó. Điều đó có thể rất hữu ích trong một số tình huống.
nó là một sự thay thế cho null vì bạn không cần phải kiểm tra cho null trước khi sử dụng nó. Chính thức hơn, đây là trường hợp đặc biệt của special case design pattern (cũng kiểm tra đối tượng Null).
Một sử dụng thành ngữ là bộ sưu tập toArray:
List<String> list = new ... ;
// fill the list
String[] array = list.toArray(new String[0]);
Lưu ý rằng trong trường hợp thứ hai, bất kỳ 'Chuỗi []' nào cũng sẽ hoạt động tốt; nó chỉ cần một thể hiện của loại bạn muốn chuyển đổi nó thành. –
Hãy chỉnh sửa câu hỏi của bạn để làm rõ. – Nippysaurus