2

一部のクラスがテスト用であることを示すために、Java で@Stub@Exampleまたはアノテーションを作成したいと思います。@Mockまた、ライブラリのユーザーがそれらを使用するのを思いとどまらせるために、これらのクラスを非推奨にするのが好きです。@NullableJSR305 に類似したものやその他のアノテーションを作成するのが好きです。

私はこれを思いついた:

import javax.annotation.meta.TypeQualifierNickname;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;

@Deprecated
@Retention(RetentionPolicy.RUNTIME)
@TypeQualifierNickname
@Target(value=TYPE)
public @interface Stub {
}

そしてユースケース:

@Stub
public final class SuperAwesome implements Feature {
}

残念ながら、 を使用しているにもかかわらず、ターゲットの注釈付きクラスではなく@TypeQualifierNickname、私の@Stub注釈が Intellij および javac コンパイラによって非推奨としてマークされているようです。

javac や IDE を変更しなくても機能する方法はありますか?

4

2 に答える 2

1

@Stub「アノテーションを使用してメソッドを呼び出さない」というプログラミング ルールを適用するには、いくつかのロジックを記述する必要があります。そのために使用できる 2 つのフレームワークは、Checker Frameworkerror-proneです。

欠点は、ライブラリのユーザーがコードをコンパイルするたびにツールを実行する必要があることです。ビルド プロセスを調整して、プログラミング ルールをチェックするツールを実行する方法を説明する手順を記述する必要があります。

于 2016-04-05T11:33:36.323 に答える
0

カスタム アノテーション プロセッサを

@Deprecated

注釈は、それが使用されている場所ではなく、スタブ インターフェイスに適用されます。簡単な検索を行いましたが、ほとんどの例はコンソールに出力するだけです。これは役立つかもしれません

https://deors.wordpress.com/2011/10/08/annotation-processors/

于 2016-04-04T15:30:15.533 に答える