2011-10-05 24 views
5

documentation for @ParametersAreNonnullByDefault說,即:@ParametersAreNonnullByDefault是否也適用於方法返回值?

該註釋可以應用於一個包,類或方法來指示方法參數在元件是由缺省值,除非非空...

我不認爲方法的返回類型/值是它的參數。這只是其簽名的一部分,所以這對我來說有點模糊。

Java tutorial for methods似乎覺得像我這樣的。


由於Joachim Sauer在他answer,名字@ParametersAreNonnullByDefault參數)的評論部分指出了我應該爲我已經清楚地表明,這個註釋並不適用於方法的返回類型/值。我失明瞭! :)感謝Joachim!

在此我可以照亮只說一個@EverythingIsNonnullByDefault應該somwhere存在。 :)

+0

那麼,你認爲這個註釋會應用於返回值的原因是什麼? –

+0

我沒有理由爲什麼會這樣做,而是我希望這樣做。 (見我的評論[這個答案](http://stackoverflow.com/questions/7658353/is-parametersarenonnullbydefault-applies-to-method-return-values-too/7658375#7658375)。) –

回答

3

我沒有看到一個原因@ParametersAreNonnullByDefault應適用於返回值。

+0

我的原因,它是' @ Nonnull'也可以應用於方法返回值。至少[FindBugs'@NonNull'註釋文檔](http://findbugs.sourceforge.net/manual/annotations.html)(幾乎與'@ Nonnull'幾乎相同)只是說。 –

+0

@Psycho_Dad:你指定返回類型的無效,是的。但是,這並不意味着如果你不設置它,**這個**默認註釋會影響它。 –

+0

對不起,但我不明白你的意思。我的問題是,如果我設置**,那麼手頭註釋也適用於方法的返回值。如果我沒有設置它,我不會不在乎它做什麼。 :) –

6

不,@ParametersAreNonnullByDefault僅適用於方法的參數 - 它從調用者接受的值(在括號之間)。該方法仍然可以自由返回值null

這是一個類,它結合了您可以應用@Nonnull的所有三個地方,儘管在我們的代碼中我仍然使用三個單獨的註釋,其中一個由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 { 
} 
相關問題