8

注釈を作成しました

/**
 * Highlights this method is declared in XML
 */
public @interface FromXML {
}

私はこれを次のようなメソッドで使用しています:

@FromXML
public void onSomethingClick(View v){

}

このv変数は、Androidリフレクションシステムがこのメソッドを呼び出すために必要です。ただし、入力変数vは使用されていないため、IDEはこれを警告します。私はこの警告が好きで、コードの残りの部分でそれをオンにしたいです

ここに画像の説明を入力してください

警告を隠すために私はできる

@SuppressWarnings("unused")
@FromXML
public void onSomethingClick(View v){

}

または、paramタグを追加できます

しかし、IDE(Eclipse)が私の@FromXML注釈を読み取り、警告を出さないようにしたいと思います。

アノテーションを拡張できないことは知っていますが、基本的にはそれが私がやりたいことです。

'警告の抑制'注釈として認識されるように注釈を追加する方法はありますか?

また

警告を抑制するように注釈をコーディングする方法はありますか?

4

3 に答える 3

11

いつでもEclipseのプラグインを作成できます。このプラグインは、ソースをスキャンして、ケース内のこれらのアノテーションを見つけ、ケース@FromXML内に追加のアノテーションを追加します@SuppressWarnings

そのためのコマンドを作成し、そのコマンドが実行されたら、このプラグインを実行します。

Eclipseプラグインの作成

お役に立てれば。

更新-これを使用してFLUKEを実行することはできませんでした(試してみました):

またはAspectJを使用して警告を削除するAspectJを使用 してEclipseに警告を追加する

このチュートリアルでは、開発者がコードで使用する場合、Eclipseに警告を追加するためにAspectJSystem.out.println()を使用します。したがって、注釈が存在する場合に警告を削除するために、逆の操作を行うことができます。

更新2: Eclipseには、カスタムアノテーションプロセッサを作成したり、バンドルされたアノテーションプロセッサを編集したりする方法があります(未使用の変数警告を生成します)。そのため、カスタムの方法でそのプロセッサを微調整する必要があります。

いくつかの素晴らしいリンク:

Eclipseアノテーションプロセッサ開発のチュートリアル

Java開発ツール-アノテーション処理ツール

于 2012-11-30T12:40:01.103 に答える
7

このメソッドを定義するインターフェースを作成できると思います。そうすれば、クラスはメソッドをオーバーライドし、警告は表示されないはずです。

FromXML.java:

public @interface FromXML {
}

MyInterface.java:

public interface MyInterface {
    @FromXML
    public void onSomethingClick(View v);
}

MyClass.java

public MyClass implements MyInterface {

    @Override
    @FromXML
    public void onSomethingClick(View v){
    }
}

編集:別の解決策は、メソッドを抽象として定義することです。実際、私があなたのコードを理解しているように、あなたのメソッドは単なる宣言です(実装はXMLファイルにあります)。したがって、あなたの問題はIDEの問題というよりも設計上の問題です(あなたのIDEは警告についてちょうどいいです)。現実には、メソッドは抽象的であり、別の場所で定義されています。

したがって、メソッドを抽象として定義すると問題は解決しますが、クラスを抽象にする必要があります。

public abstract class MyClassUsingOnSomethingClick {

/*
 * All the class implementation can be here as the normal class.
 */

    @FromXML
    public abstract void onSomethingClick(View v);

}

このソリューションではオブジェクトを簡単に作成できないとおっしゃるでしょうが、次の2つのソリューションがあります。

1-オブジェクトをインラインで作成します。

MyClassUsingOnSomethingClick a = new MyClassUsingOnSomethingClick() {
    @Override
    @FromXML
    public void onSomethingClick(View v) {}
};

2-抽象にファクトリメソッドを作成しますMyClassUsingOnSomethingClick

public static final MyClassUsingOnSomethingClick createEmptyMyClassUsingOnSomethingClick() {
    return new MyClassUsingOnSomethingClick() {
        @Override
        @FromXML
        public void onSomethingClick(View v) {}
    };
}

// and then, create with: :
MyClassUsingOnSomethingClick a = MyClassUsingOnSomethingClick.createEmptyMyClassUsingOnSomethingClick();

あなたがより速い解決策を好むことを私は理解していますが、私はこの解決策が最もクリーンであると信じています:

  1. オブジェクト指向プログラミングの哲学を尊重します。
  2. IDEに固有のものではありません。
  3. 注釈処理ツールを回避します(私の意見では、これは非常に賢明に使用する必要があります)
于 2012-11-30T10:36:46.577 に答える
4

わかりました。簡単な方法や形式でこれを行うことはできません。

アノテーションパッケージを見るhttp://docs.oracle.com/javase/1.5.0/docs/api/java/lang/annotation/package-summary.html

アノテーションを拡張できない: Javaでアノテーションを拡張できないのはなぜですか?

別のアノテーションjava.lang.Overrideを実装できません

私は模倣/モック/ふりをすることはできません@Override

私が自分に追加@Overrideした場合、@FromXMLそれはチェーンの下に継承されません。

唯一の方法は、注釈を認識して警告を停止するEclipseプラグインを作成することです。これを行う簡単な方法が見つからないので、残念です。

@FromXMLまた、エントリポイントのインターフェイスを作成するルートもたどりました。これは非常に素晴らしく、自分Activityがタイプであると伝えられたため、注釈はもう必要ありませんでした。おそらく、この設計変更がその答えです。

于 2012-12-05T09:56:54.283 に答える