Javaでの注釈の目的は何ですか?私は、コメントと実際のコードとの間のどこかにそれらのあいまいな考えを持っています。実行時にプログラムに影響しますか?
それらの典型的な使用法は何ですか?
それらはJavaに固有のものですか?C ++に相当するものはありますか?
Javaでの注釈の目的は何ですか?私は、コメントと実際のコードとの間のどこかにそれらのあいまいな考えを持っています。実行時にプログラムに影響しますか?
それらの典型的な使用法は何ですか?
それらはJavaに固有のものですか?C ++に相当するものはありますか?
回答:
注釈は主に、他のコードを検査するコードによって使用されます。これらは、実行時に既存のクラスを変更(つまり、装飾またはラップ)して動作を変更するためによく使用されます。JUnitやHibernateなどのフレームワークは、アノテーションを使用して、フレームワークを使用するために自分で作成する必要があるコードの量を最小限に抑えます。
オラクル社のサイトでは、Javaの概念とその意味について説明しています。
また、Javaに固有のものですか?C ++に相当するものはありますか?
いいえ、ただしVBとC#には属性があります同じもののあります。
それらの使用は非常に多様です。典型的なJavaの例の1つ@Override
はコードに影響を与えませんが、装飾されたメソッドが実際に別のメソッドをオーバーライドしない場合に警告(またはエラー)を生成するためにコンパイラーを使用できます。同様に、メソッドに古いマークを付けることができます。
次に、反射があります。コードにクラスのタイプを反映すると、属性にアクセスして、そこにある情報に従って動作することができます。私はJavaの例を知りませんが、.NETではこれがコンパイラによって使用され、クラスの(逆)シリアル化情報を生成し、構造のメモリレイアウトを決定し、関数のインポートを宣言します(特に)レガシーライブラリからの。また、IDEフォームデザイナの動作も制御します。
/ EDIT:クラスの属性は、タグインターフェース(JavaのSerializableなど)に相当します。ただし、.NETコーディングガイドラインでは、タグインターフェイスを使用しないとしています。また、メソッドレベルではなく、クラスレベルでのみ機能します。
アンダースは良い要約を与え、そしてこれがJUnit注釈の例です
@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}
ここで、@Test
注釈はJUnitに、flatfileMissing
メソッドが実行すべきテストであり、期待される結果がスローされることを伝えていIOException
ます。したがって、テストを実行すると、このメソッドが呼び出され、IOException
がスローされたかどうかに基づいてテストが成功または失敗します。
Annotationsで実行できるクールな機能を確認するには、JavaBeanアノテーションとアノテーションプロセッサをチェックしてください。
これらはコードの生成、ビルド中に追加の検証を追加するのに最適であり、エラーメッセージフレームワークにも使用しています(まだ公開されていません-ボスとクリアする必要があります...)。
リテラル定義により、注釈は要素にメモを追加します。同様に、Javaアノテーションは、コードに関する詳細情報を提供するためにソースコードに挿入するタグです。Javaアノテーションは、情報をアノテーション付きプログラム要素に関連付けます。Javaアノテーションのほかに、Javaプログラムには、通常、ソースコードファイルのコメント内に含まれる大量の非公式ドキュメントがあります。ただし、Javaの注釈は、注釈の形式を記述するために注釈型を使用してプログラム要素に直接注釈を付けるコメントとは異なります。Java Annotationsは、情報を標準的かつ構造化された方法で提示するため、処理ツールで快適に使用できます。
詳細を読むために、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
}