2017-01-27 16 views
5

Các Javadoc cho Preconditions từ các tiểu bang thư viện ổi của Google rằng:Tại sao Objects.requireNonNull() không được sử dụng nếu com.google.common từ Ổi được sử dụng?

Các dự án sử dụng com.google.common nói chung nên tránh việc sử dụng các Objects.requireNonNull(Object). Thay vào đó, hãy sử dụng bất kỳ số nào trong số checkNotNull(Object) hoặc Verify.verifyNotNull(Object) phù hợp với tình huống. (Tương tự với quá tải chấp nhận tin nhắn.)

Động lực đằng sau đề xuất này là gì? Tôi không thể tìm thấy bất kỳ thứ gì trong Javadoc.

Ý tôi là, họ cũng làm điều tương tự, và trong những trường hợp này thường tốt hơn khi sử dụng API chuẩn (ví dụ, những người đứng sau Joda-Time hiện khuyên mọi người sử dụng java.time, không dùng nữa khuôn khổ).

Như một ví dụ, hai hàng này xác nhận đầu vào làm điều tương tự:

class PreconditionsExample { 
    private String string; 

    public PreconditionsExample(String string) { 
    this.string = Objects.requireNonNull(string, "string must not be null"); 
    this.string = Preconditions.checkNotNull(string, "string must not be null"); 
    } 
} 

Trả lời

4

phiên bản Ổi cung cấp một số lượng quá tải mà chấp nhận một chuỗi định dạng và lập luận. Để báo giá cho số PreconditionsExplained wiki:

Chúng tôi ưa thích việc kiểm tra điều kiện tiên quyết của chúng tôi hơn ví dụ: các tiện ích so sánh từ Apache Commons vì một vài lý do. Tóm lại:

...

  • đơn giản, varargs "printf kiểu" thông điệp ngoại lệ. (Lợi thế Đây cũng là lý do tại sao chúng tôi khuyên bạn nên tiếp tục sử dụng checkNotNull qua Objects.requireNonNull giới thiệu trong JDK 7.)
+0

Ah, tôi hiểu rồi! Tôi sẽ có một đề cập ngắn về điều này trong Javadocs. Tôi nhận được nó, nhưng tôi đoán bạn có thể cải thiện câu trả lời của bạn hơn nữa bằng cách thêm một ví dụ mà 'Objects.requireNonNull()' không đủ. – Magnilex

2

AFAIK,

  1. Đối với tính nhất quán
  2. Đối với cách bổ sung làm sau,

    String world = "world"; Preconditions.checkNotNull(string, "Hello %s",world);

Với đối tượng, bạn phải sử dụng String.format. Hơn nữa, việc thực hiện cả hai phương pháp đều giống nhau.

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