質問

Java におけるアノテーションの目的は何ですか?私はそれらをコメントと実際のコードの中間のようなものだと漠然と考えています。それらは実行時のプログラムに影響しますか?

典型的な使用法は何ですか?

それらは Java に固有のものですか?C++ に相当するものはありますか?

役に立ちましたか?

解決

注釈は主に、他のコードを検査するコードによって使用されます。これらは、変更するためによく使用されます (すなわち、実行時に既存のクラスを装飾またはラッピング) して、その動作を変更します。などのフレームワーク JUnit そして 休止状態 アノテーションを使用すると、フレームワークを使用するために自分で記述する必要があるコードの量を最小限に抑えることができます。

オラクルは Java における概念とその意味についての分かりやすい説明 彼らのサイトで。

他のヒント

また、それらは Java に固有のものですか、C++ に相当するものはありますか?

いいえ、しかし VB と C# には 属性 どちらも同じものです。

その用途は非常に多様です。典型的な Java の例としては、 @Override コードには影響しませんが、装飾されたメソッドが実際に別のメソッドをオーバーライドしない場合、コンパイラが警告 (またはエラー) を生成するために使用できます。同様に、メソッドを廃止のマークを付けることができます。

それから反省です。クラスの型をコードに反映すると、属性にアクセスし、そこにある情報に従って動作することができます。Java での例は知りませんが、.NET では、これはコンパイラによって生成されるために使用されます。 (逆)シリアル化 クラスの情報を決定する メモリレイアウト 構造物と 関数インポートを宣言する (とりわけ) レガシーライブラリから。また、IDE フォーム デザイナの動作方法も制御します。

/編集:クラスの属性はタグ インターフェイスに相当します (たとえば、 シリアル化可能 Javaでは)。ただし、.NET コーディング ガイドラインでは、タグ インターフェイスを使用しないようにと規定されています。また、メソッド レベルではなくクラス レベルでのみ機能します。

Anders が適切な要約を提供しています。JUnit アノテーションの例を次に示します。

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

ここで、 @Test アノテーションは JUnit に次のことを伝えています。 flatfileMissing メソッドは実行する必要があり、期待される結果がスローされるテストです。 IOException. 。したがって、テストを実行すると、このメソッドが呼び出され、テストが成功または失敗するかどうかが決まります。 IOException 投げられる。

Java には、注釈を作成するだけでなく、これらの注釈がソース コード上でどのように機能するかを決定する注釈処理ツール (apt) もあります。

ここ の紹介です。

注釈を使ってできる素晴らしい機能については、以下をご覧ください。 私の JavaBean アノテーションとアノテーション プロセッサ.

これらは、コードを生成したり、ビルド中に追加の検証を追加したりするのに最適です。また、私はエラー メッセージ フレームワークにも使用しています (まだ公開されていません -- 上司に確認する必要があります...)。

リテラルの定義により、アノテーションは要素にメモを追加します。同様に、Java アノテーションは、コードに関する詳細情報を提供するためにソース コードに挿入されるタグです。Java アノテーションは、情報をアノテーションが付けられたプログラム要素に関連付けます。Java アノテーションのほかに、Java プログラムには大量の非公式ドキュメントがあり、通常はソース コード ファイルのコメント内に含まれます。ただし、Java 注釈は、注釈の形式を記述する注釈タイプを使用してプログラム要素に直接注釈を付けるコメントとは異なります。Java アノテーションは情報を標準的かつ構造化された方法で提示するため、処理ツールで適切に使用できるようになります。

詳細については、素晴らしいチュートリアルがあります。 Java アノテーション

Java の @Override アノテーションをいつ使用しますか?またその理由は何ですか?リンクは、オーバーライド アノテーション (@override) をいつ使用する必要があるかに関する質問を参照しています。これは、アノテーションの概念をよりよく理解するのに役立つかもしれません。チェックしてください。

注釈EJBに関しては、明示的なミドルウェアアプローチよりも暗黙的なミドルウェアアプローチを選択することとして知られています。注釈を使用すると、APIから正確に必要なものをカスタマイズします。 :注釈を使用しない場合:コードは次のようになります

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

注釈を使用している間、コードには、ミドルウェアサービスを使用するための面倒なAPI呼び出しが含まれていません。コードはクリーンでビジネス ロジックに重点を置いています

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}

注釈, メタデータの一種で、プログラム自体の一部ではないプログラムに関するデータを提供します。注釈は、注釈を付けたコードの動作に直接影響しません。

注釈には、次のようなさまざまな用途があります。

  • コンパイラに関する情報 — アノテーションは、コンパイラでエラーを検出したり、警告を抑制したりするために使用できます。
  • コンパイル時およびデプロイメント時の処理 — ソフトウェア ツールは、注釈情報を処理してコードや XML ファイルなどを生成できます。
  • ランタイム処理 — 一部の注釈は実行時に検査できます。

可視範囲は次のように定義されます。 java.lang.annotation.RetentionPolicy 定数 SOURCE, CLASS, 、 そして RUNTIME

  • RetentionPolicy.SOURCE:注釈はプログラムのソース コード内で利用可能であり、コンパイラやコンパイラで使用できます。 適切な コード生成用。
  • RetentionPolicy.CLASS:注釈は .class ファイル内にありますが、実行時には使用できません。などのバイトコード操作ツールによって使用されます。 ASM 変更を実行する
  • RetentionPolicy.RUNTIME:注釈は、getAnnotations() による Java リフレクションによる検査のために、.class ファイルおよびランタイムで使用できます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top