Có phương thức tĩnh “cả null hoặc bằng nhau” tiêu chuẩn Java không?


101

Để lưu một số thao tác nhập và làm rõ mã của tôi, có phiên bản tiêu chuẩn của phương pháp sau không?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}

Ai đó có thể nói nơi một điều như vậy là hữu ích?
anjanb 8/10/08

2
Nó chỉ cho phép bạn bỏ qua kiểm tra null trong phương thức equals () của bạn.
Michael Myers

1
Nếu bạn đang triển khai một Bộ sưu tập, phương thức .contains () của bạn, khi được cung cấp "o" cần phải kiểm tra "nếu bộ sưu tập này chứa ít nhất một phần tử e sao cho (o == null? E == null: o.equals (e )). " Tương tự, phương thức .remove () của bạn phải loại bỏ một phần tử như vậy.
newacct

6
Chỉ hai xu của tôi. Tôi sẽ sử dụng: public static boolean bothNullOrEqual (Object x, Object y) {return (x == y || (x! = Null && x.equals (y))); } IMHO, Nó dễ đọc hơn cho những người mới lập trình.
m_vitaly

1
Một trường hợp sử dụng khác: so sánh một giá trị để xem liệu nó có thay đổi so với giá trị trước đó hay không trong khi kiểm tra bẩn.
Neromancer

Câu trả lời:


193

Với Java 7 bây giờ bạn có thể trực tiếp thực hiện một lệnh null safe bằng:

Objects.equals (x, y)

(Thư viện Jakarta Commons ObjectUtils.equals () đã trở nên lỗi thời với Java 7)


Phương pháp này cũng được triển khai trong Googles Dependency injection-libray Guice.
Niels

1
Mùa xuân cũng thực hiện một phương pháp tương tự: nullSafeEquals trên lớp ObjectUtils
jpsstavares

2
Google Guava cũng có Objects.equals ().
Spina

Đây chỉ là nullsafe tự phụ x. Đối với y nó phụ thuộc vào việc thực hiện bằng của đối tượng đã cho. (triển khai là return (x == y) || (x != null && x.equals(y));)
emi-le

23

nếu tình cờ bạn có quyền truy cập vào thư viện Jakarta Commons thì có ObjectUtils.equals () và rất nhiều hàm hữu ích khác.

CHỈNH SỬA: đọc sai câu hỏi ban đầu


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.