2011-10-05 42 views
5

Các documentation for @ParametersAreNonnullByDefault nói rằng:@ParametersAreNonnullByDefault có áp dụng cho các giá trị trả về phương thức không?

chú thích này có thể được áp dụng cho một gói, lớp hoặc phương pháp để chỉ ra rằng phương pháp thông số trong yếu tố đó là nonnull theo mặc định trừ khi ...

Tôi không xem xét kiểu trả về/giá trị của phương thức là tham số của nó. Nó chỉ là một phần của chữ ký của nó, vì vậy đây là loại mơ hồ đối với tôi.

Java tutorial for methods dường như giống như tôi.


Như Joachim Sauer chỉ ra cho tôi trong phần ý kiến ​​của answer, tên @ParametersAreNonnullByDefault (thông số) của mình nên đã ghi rõ cho tôi rằng chú thích này không áp dụng cho các loại trở lại phương pháp/giá trị . Tôi bị mù! :) Cảm ơn Joachim!

Trong điều kiện này, tôi chỉ có thể nói rằng @EverythingIsNonnullByDefault sẽ tồn tại ở mọi nơi. :)

+0

Vì vậy, lý do của bạn để nghĩ rằng chú thích này _would_ áp dụng cho giá trị trả về là gì? –

+0

Tôi không có lý do tại sao nó sẽ làm điều này, thay vào đó tôi muốn nó được làm điều này. (Xem nhận xét của tôi cho [câu trả lời này] (http://stackoverflow.com/questions/7658353/is-parametersarenonnullbydefault-applies-to-method-return-values-too/7658375#7658375).) –

Trả lời

3

Tôi không thấy lý do tại sao @ParametersAreNonnullByDefault nên áp dụng cho giá trị trả lại.

+0

Lý do của tôi là ' @ Nonnull' cũng có thể được áp dụng cho các giá trị trả về của phương thức. Ít nhất là [tài liệu cho chú thích '@ NonNull' của FindBugs] (http://findbugs.sourceforge.net/manual/annotations.html) (gần như là, nếu không giống với' @ Nonnull') chỉ nói rằng . –

+0

@Psycho_Dad: bạn chỉ định tính vô hiệu của kiểu trả về, có. Nhưng điều đó không có nghĩa là ** ** chú thích mặc định này ảnh hưởng đến nó nếu bạn không đặt nó. –

+0

Xin lỗi nhưng tôi không hiểu rõ bạn. Câu hỏi của tôi là nếu chú thích trong tay cũng áp dụng cho các giá trị trả về của phương thức ** nếu tôi đặt nó **. Tôi không thể quan tâm ít hơn nếu tôi không đặt nó. :) –

6

Không, @ParametersAreNonnullByDefault chỉ áp dụng cho các tham số của phương thức - giá trị mà nó chấp nhận từ người gọi (giữa các dấu ngoặc đơn). Phương pháp này vẫn miễn phí để trả lại giá trị null.

Đây là lớp kết hợp cả ba nơi bạn có thể áp dụng @Nonnull, mặc dù trong mã của chúng tôi, tôi vẫn sử dụng ba chú thích riêng biệt, một trong số đó được cung cấp bởi JSR-305.

package com.sample; 

import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 

import javax.annotation.meta.TypeQualifierDefault; 

/** 
* This annotation can be applied to a package, class or method to indicate that all 
* class fields and method parameters and return values in that element are nonnull 
* by default unless overridden. 
*/ 
@Documented 
@Nonnull 
@TypeQualifierDefault({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface EverythingIsNonnullByDefault { 
} 
Các vấn đề liên quan