8

ドキュメントに@ParametersAreNonnullByDefaultは、次のように書かれています。

この注釈をパッケージ、クラス、またはメソッドに適用して、その要素のメソッド パラメータがデフォルトで非 null であることを示すことができます。

メソッドの戻り値の型/値がそのパラメーターであるとは考えていません。それはその署名の一部にすぎないので、これは私にはあいまいです.

メソッドのJavaチュートリアルは私のように考えているようです。


Joachim Sauerが彼の回答のコメント セクションで指摘したように、名前@ParametersAreNonnullByDefault( parameters ) は、この注釈がメソッドの戻り値の型/値には適用されないことを明確に示しているはずです。私は盲目でした!:) ありがとうヨアヒム!

これに照らして、私はどこかに@EverythingIsNonnullByDefault存在するべきだとしか言えません。:)

4

2 に答える 2

12

いいえ、メソッドのパラメーター、つまり呼び出し元から受け取る値 (括弧内) に@ParametersAreNonnullByDefaultのみ適用されます。このメソッドは、自由に値を返すことができます。null

を適用できる 3 つの場所すべてを組み合わせたクラスを次に示しますが@Nonnull、このコードではまだ 3 つの個別の注釈を使用しており、そのうちの 1 つは 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 {
}
于 2012-11-17T08:52:13.103 に答える
3

@ParametersAreNonnullByDefault戻り値に適用する理由がわかりません。

于 2011-10-05T08:05:55.637 に答える