119

Javaでの注釈の目的は何ですか? 私は、コメントと実際のコードの間のどこかとして、このあいまいな考えを持っています。それらは実行時にプログラムに影響しますか?

それらの典型的な使用法は何ですか?

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

4

8 に答える 8

84

アノテーションは主に、他のコードを検査しているコードによって使用されます。これらは、実行時に既存のクラスを変更(つまり、装飾またはラップ)して動作を変更するためによく使用されます。JUnitHibernateなどのフレームワークは、アノテーションを使用して、フレームワークを使用するために自分で作成する必要のあるコードの量を最小限に抑えます。

Oracleのサイトには、Javaでの概念とその意味についての適切な説明があります。

于 2008-08-23T13:38:25.760 に答える
17

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

いいえ。ただし、VBとC#には同じ属性があります。

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

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

/ EDIT:クラスの属性は、タグインターフェイス( JavaのSerializableなど)に相当します。ただし、.NETコーディングガイドラインでは、タグインターフェイスを使用しないように規定されています。また、これらはクラスレベルでのみ機能し、メソッドレベルでは機能しません。

于 2008-08-23T13:31:05.590 に答える
13

Andersは良い要約を示しており、これがJUnitアノテーションの例です。

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

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

于 2008-08-23T16:16:19.283 に答える
7

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

ここに紹介があります。

于 2008-08-25T17:02:12.790 に答える
4

Annotations でできる便利な機能については、私の JavaBean アノテーションとアノテーション プロセッサをご覧ください。

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

于 2008-09-16T15:29:27.743 に答える
1

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

于 2013-11-30T07:55:11.127 に答える
0

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

于 2014-04-08T10:32:18.663 に答える
0

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
}

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

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}
于 2016-01-21T15:21:25.460 に答える