Javaでの注釈の目的は何ですか? 私は、コメントと実際のコードの間のどこかとして、このあいまいな考えを持っています。それらは実行時にプログラムに影響しますか?
それらの典型的な使用法は何ですか?
それらはJavaに固有のものですか?C++ に相当するものはありますか?
Javaでの注釈の目的は何ですか? 私は、コメントと実際のコードの間のどこかとして、このあいまいな考えを持っています。それらは実行時にプログラムに影響しますか?
それらの典型的な使用法は何ですか?
それらはJavaに固有のものですか?C++ に相当するものはありますか?
アノテーションは主に、他のコードを検査しているコードによって使用されます。これらは、実行時に既存のクラスを変更(つまり、装飾またはラップ)して動作を変更するためによく使用されます。JUnitやHibernateなどのフレームワークは、アノテーションを使用して、フレームワークを使用するために自分で作成する必要のあるコードの量を最小限に抑えます。
Oracleのサイトには、Javaでの概念とその意味についての適切な説明があります。
また、それらはJavaに固有のものですか、C ++に相当するものはありますか?
いいえ。ただし、VBとC#には同じ属性があります。
それらの使用法は非常に多様です。典型的なJavaの例の1つ@Override
はコードに影響を与えませんが、装飾されたメソッドが実際に別のメソッドをオーバーライドしない場合、コンパイラーが警告(またはエラー)を生成するために使用できます。同様に、メソッドは廃止されたとマークすることができます。
次に、反射があります。クラスのタイプをコードに反映すると、属性にアクセスして、そこにある情報に従って動作することができます。Javaでの例はわかりませんが、.NETでは、これはコンパイラによってクラスの(逆)シリアル化情報を生成し、構造のメモリレイアウトを決定し、レガシーライブラリからの関数インポートを宣言するために使用されます(とりわけ)。また、IDEフォームデザイナの動作も制御します。
/ EDIT:クラスの属性は、タグインターフェイス( JavaのSerializableなど)に相当します。ただし、.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) もあり、注釈を作成するだけでなく、これらの注釈がソース コードでどのように機能するかを決定します。
ここに紹介があります。
Annotations でできる便利な機能については、私の JavaBean アノテーションとアノテーション プロセッサをご覧ください。
それらはコードを生成し、ビルド中に追加の検証を追加するのに最適です。また、エラー メッセージ フレームワークにも使用しています (まだ公開されていません。上司に確認する必要があります...)。
リテラルの定義により、注釈は要素にメモを追加します。同様に、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
}
Annotation を使用している間、ミドルウェア サービスを使用するための面倒な API 呼び出しがコードに含まれていません。コードはクリーンで、ビジネス ロジックに重点を置いています
transfer(Account account1, Account account2, long amount)
{
// 1: Subtract the balance from one account, add to the other
}