2008-10-03 15 views

Trả lời

31

Bằng cách làm như sau:

List<User> users = Collections.emptyList(); 

Các loại danh sách trở về từ Collections.emptyList(); sẽ suy ra như một String do bên trái phía của công việc . Tuy nhiên, nếu bạn thích để không phải suy luận này, bạn có thể định nghĩa nó một cách rõ ràng bằng cách làm như sau:

List<User> users = Collections.<User>emptyList(); 

Trong trường hợp đặc biệt này, điều này có thể xuất hiện như là dư thừa để hầu hết mọi người (trong thực tế, tôi đã nhìn thấy rất ít mã ra trong tự nhiên mà làm cho sử dụng các đối số kiểu tường minh), tuy nhiên đối với một phương pháp với chữ ký: void doStuff(List<String> users) nó sẽ được hoàn toàn sạch cho một để gọi doStuff() với một cuộc tranh cãi kiểu tường minh như sau:

doStuff(Collections.<String>emptyList()); 
+2

mỗi khi bạn viết một đối số loại rõ ràng trong một phương pháp, thần giết chết một con mèo con (tôi nghĩ đó là josh bloch người đã nói điều này) –

1
List<User> users = Collections.emptyList(); 
1

Sau khi tạo g danh sách trống, tôi khuyên bạn nên lưu trữ nó dưới dạng hằng số thay vì tạo một danh sách mới mỗi lần.

Ngoài ra, có lợi ích hiệu suất khi sử dụng Collections.emptyList() so với new ArrayList(0), mặc dù sự khác biệt có thể là nhỏ. Danh sách được trả về bởi emptyList() được tối ưu hóa để trở thành một danh sách rỗng không thay đổi. Ví dụ, phương thức size() đơn giản trả về 0, chứ không phải là tra cứu trường hoặc bất kỳ ArrayList nào.

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