2009-06-24 25 views
26

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.

+0

Hãy chỉnh sửa câu hỏi của bạn để làm rõ. – Nippysaurus

Trả lời

43

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

+0

Để 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

15

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.

4

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]); 
+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. –

Các vấn đề liên quan