2010-11-26 17 views
12

私はなぜJavaのアノテーションがあまりにも多く使われているのか聞いてみたいのですが...私は彼らがxpの設定をjpaに置き換えたことを知っていますが、なぜこの種の設定が使われていますか? なぜJavaアノテーションですか?

@Entity 
class Ent{ 
    // some fields 
} 
//... somewhere in the other file far far away 
class NonEnt{ 
    // whatever here 
} 
ここで、 EntityManagerのpersistメソッドを使用して永続コンテキストに入れようとすると、 NonEntインスタンスを実行しようとするとランタイムエラーが発生します(コンパイルエラーが発生しやすくなります)。私には明白な解決策があります。@Annotationsを使用する代わりに、エンティティに何らかのメソッドなしインターフェイスを実装させるようにしてください。しかし、これはフレームワークデザイナーの間では一般的ではありませんが、このソリューションの欠点は何ですか?
お返事ありがとう...

+0

このライブラリの開発者にとっての設計上の質問です。コンパイル時のエラーは実行時のエラーよりも優れています。おそらくJavaコンパイラは引数の注釈を指定する方法を持っているはずですか?それが達成されるまで、マーカインタフェースが良いでしょう。 –

+1

最近、質問を閉じるためのリクエストが多すぎます...なぜ人々は質問を閉じる理由を正当化しませんか? –

+1

下位互換性は、これらの重要な決定の多くを引き起こします。彼らはXMLファイルだけを持っていたときに、Javaクラスを変更する必要はないと思っていたかもしれません。しかし、今は古いバージョンを壊さずにインターフェイスを強制することはできません。アノテーションを使用すると、このORをXMLファイルとして使用できます。インターフェイスを使用するには、XMLのユーザーであっても、すべてのコードを変更する必要があります。 –

答えて

8

、注釈はいくつかの利点があります:彼らはすることができ

  • パラメータ化
  • 彼らはより多くのきめ細かい - あなたはクラスにも他にいないだけで、それらを添付することができます(フィールド、メソッド、メソッドの引数など)

注釈はおそらくintrusiv eですが、この点は味わい深く議論の余地があります。

参照:

5

注釈を使用すると、クライアントにインターフェイスを実装したり、クラスを拡張したりすることを余儀なくされることはありません。マーカーインタフェースと比較すると

3

私のための明白な解決策があり、

A何あなたが記述と呼ばれ、 「マーカーインターフェイス」とは、インタフェースの概念私はあなたが明らかにそれを考慮する唯一の理由は、Serializableのためだと思う - その時に注釈がなかったためにのみ存在する。

代わり @Annotationsを使用していくつかの 無メソッドインタフェースを実装するエンティティを強制。しかし、これはフレームワークデザイナーの間で人気がありません 、このソリューションの の欠点は何ですか?

利点は何ですか?注釈はパラメータを持つことができるという大きな利点があり、より細かく整理されています。マーカーインタフェースは、クラスレベルでのみ機能します。 Javaのチュートリアル引用

+2

利点は、ランタイムの代わりにコンパイルエラーです。 – coubeatczech

+0

@coubeatczech trueですが、それは小さな利益のために巨額の価格です。アノテーションでエラーをコンパイルする場合は、AspectJを使用してください。これは、アノテーション(またはその欠如)を含む多くの異なるポイントカットに基づいてカスタムコンパイラエラーを定義することができます –

+1

アノテーションプロセッサ(apt)でも同じことを達成できます。 –

3

注釈は プログラム自体の一部ではありません プログラムに関するデータを提供します。彼らは コードの操作に直接影響しません 彼らは注釈をつけます。

注釈は、それらの間で使用回数、 を持っている:コンパイラの

  • 情報 - 注釈はエラーを検出または 警告を抑制するために コンパイラで使用することができます。
  • コンパイラ時およびデプロイ時の処理 - ソフトウェアツール は、アノテーション情報を処理するために にコード、XMLファイルなどを生成することができます。
  • 実行時処理 - 一部の注釈は実行時に検査される になるように利用できます。

あなたが見ることができるように、注釈はインタフェースを含むJavaであなたの種類、程度のメタデータを指定する方法です、彼らは決して彼らのために交換されています。

0

Javaアノテーションは、クラス、メソッド、またはインスタンス変数にいくつかの追加情報を追加するときに役立ちます。これらの注釈を頻繁に使用するライブラリがたくさんあります。これらの注釈は、実行時にコードを変更する機能を使用して、コードをシンプルで読みやすい状態に保ちます。

たとえば、lombokライブラリを使用した場合、コンパイル時にsetter、getter、およびconstructorが作成され、コードと時間の行が保存されます。

コンパイラがコードを実行すると、lomokは@Setterまたは@Getterアノテーションでマークされたすべてのフィールドを検索し、そのフィールドのセッターとゲッターをクラスに追加します。

もう1つの例はJunitテストランナーです。 junitがテストクラスの通常のヘルパーメソッドとテストを区別する方法。 2つを区別するために、@Testアノテーションを使用します。

This tutorial explains how you can use java annotations to create you own test runner.

関連する問題