2012-12-12 32 views
7

Cách tốt nhất để thực hiện an toàn null contains trên bộ sưu tập Java là gì?Bộ sưu tập không an toàn chứa phương pháp

nói cách khác -

if (collection != null && collection.contains(x)) 

? Tôi đã hy vọng Apache bộ sưu tập commons có một cái gì đó như CollectionUtils.contains(collection, x) mà chỉ đơn giản là sẽ trở về false nếu bộ sưu tập là null, như có với size(), mà xử lý null giống như một bộ sưu tập sản phẩm nào.

Tuy nhiên, có vẻ như không có thứ gì như vậy - tôi có bỏ lỡ nó không?

+5

Sự cố với 'collection! = Null && collection.contains (x)' là gì? Đơn giản và không có phụ thuộc bên ngoài! –

+1

@AbhinavSarkar: Đây là những gì tôi đã suy nghĩ! – Cratylus

+0

Đây là một bài viết có liên quan phần nào, bởi một người không muốn đối phó với việc kiểm tra null tất cả các thời gian: http://stackoverflow.com/questions/271526/avoiding-null-statements-in-java – RonaldBarzell

Trả lời

10

Thay vào đó, bạn nên áp dụng Mẫu đối tượng Null tại đây và sử dụng bộ sưu tập trống, chứ không phải bộ sưu tập rỗng. Tất nhiên, có lẽ điều này là thích hợp cho vấn đề của bạn, nhưng không có nhiều bối cảnh khó mà nói. Nói cách khác, tôi nghĩ rằng bạn đang giải quyết vấn đề sai - tại sao có thể collection bị bỏ trống ở vị trí đầu tiên?

+3

+1. Giải pháp thích hợp là _không sử dụng bộ sưu tập rỗng._ –

+0

Nói chung tôi đồng ý. Vấn đề cụ thể là bộ sưu tập đến từ 'session.getAttribute' và do đó có thể chưa bao giờ được đặt. Vì vậy, ít nhất một kiểm tra không null là không thể tránh khỏi - nhưng nếu có nhiều kiểm tra như vậy, có, tôi chỉ có thể có một kiểm tra duy nhất và thay thế bằng một bộ sưu tập trống. – wrschneider

+0

Trong trường hợp đó, hãy cân nhắc sử dụng tùy chọn của Guava, có lẽ? Vấn đề là vẫn còn lại bạn với một kiểm tra cho Optional.isPresent(). Tôi nghĩ rằng về cơ bản là không thể tránh khỏi. –

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