4

私は現在使用しています

@DefaultAnnotation(NonNull.class)
package jobs;

import edu.umd.cs.findbugs.annotations.DefaultAnnotation;
import edu.umd.cs.findbugs.annotations.NonNull;

ただし、アノテーション@ edu.umd.cs.findbugs.annotations.DefaultAnnotationは非推奨です:http: //findbugs.sourceforge.net/api/edu/umd/cs/findbugs/annotations/DefaultAnnotation.html

彼らはjavax.annotation.ParametersAreNonnullByDefaultを使用することを提案していますが、DefaultAnnotationはパラメーターだけでなく、フィールドとメソッドも対象としています。

では、フィールドとメソッドをデフォルトでNonnullに設定するためのjavax.annotationの代替手段は何ですか?

4

2 に答える 2

4

私の知る限り、何もありません。同じことを望んで、私はのソースをParametersAreNonnullByDefault自分のFieldsAreNonnullByDefaultものにコピーし、一致するように値をMethodsAreNonnullByDefault変更しました(そしてそれぞれ)。FindBugsはこれらの新しいアノテーションを完全にピックアップします。@TypeQualifierDefaultFIELDMETHOD

のサンプルは次のFieldsAreNonnullByDefaultとおりです。

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 or class to indicate that the 
 * classes' fields in that element are nonnull by default unless there is
 * <ul>
 *   <li>an explicit nullness annotation
 *   <li>a default field annotation applied to a more tightly nested element.
 * </ul>
 */
@Documented
@Nonnull
@TypeQualifierDefault(ElementType.FIELD)  // <-- METHOD for return values
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldsAreNonnullByDefault {
}
于 2012-11-17T08:45:12.387 に答える
1

したがって、純粋なコードの観点からは、実際には大きな違いはありません。

後でコードの配布を開始すると、違いが生じます。

アノテーションjarとJREを含むコードを出荷しない限り、問題はありません。

JREを配布する場合は、すでにご存知のとおり、Oracle JavaBinaryLicenseに準拠する必要があります。

具体的には、そのライセンスの条件を更新することをお勧めします。

F.JAVAテクノロジーの制限。「java」、「javax」、「」として識別されるクラス、インターフェース、またはサブパッケージの動作を作成、変更、または変更したり、ライセンシーに作成、変更、または動作を変更することを許可したりすることはできません。 「sun」、「oracle」、または任意の命名規則指定でOracleによって指定された同様の規則。

したがって、JREを配布していて、同じ配布にjavaxサブパッケージ内のクラスを定義するjarファイルが含まれている場合、クラスがJSRによってリリースおよび公開された仕様に準拠していない限り、Oracle JavaBinaryLicenseの条件に準拠していません。

この時点で、JSR305の公式ページを確認する必要があります。

この時点で、JSRは何も公開していません。

JSR-2016年3月現在-休眠中としてリストされています

そのため、Windowsインストーラー、OS-Xインストーラー、DockerイメージなどのJREの横に「jsr305.jar」ファイルを配布しないようにする必要があります。

于 2016-03-24T10:58:21.573 に答える