Java Annotationsコードに関する情報を提供しますが、注釈があるコードコンテンツに直接影響しません。このチュートリアルでは、Javaアノテーション、注釈のカスタマイズ方法、注釈の使用、および反射を通じて注釈を解析する方法について学びます。
Java 1.5は注釈を導入し、多くのJavaフレームワークは現在、Hibernate、Jersey、Springなどの注釈を広範囲に使用しています。注釈は、プログラムのメタデータとしてプログラムに組み込まれています。注釈は、一部の解析ツールまたはコンパイルツールによって解析できます。また、編集中または実行中に注釈が効果があることを宣言することもできます。
注釈を使用する前に、プログラムソースデータはJava AnnotationsとJavadocのみを通過しますが、注釈はこれらよりもはるかに多く提供されます。注釈にはメタデータが含まれているだけでなく、プログラムの実行シーケンスにも作用できます。注釈通訳は、注釈を通じてプログラムの実行命令を解決できます。たとえば、Jersey WebServiceでは、メソッドにURI文字列の形で**パス**アノテーションを追加し、プログラムの実行中に、Jerserインタープリターがメソッドが与えられたURIを呼び出すと判断します。
Javaカスタムアノテーションを作成します
カスタムアノテーションの作成は、インターフェイスの作成に似ていますが、注釈付きインターフェイスキーワードは @シンボルから始める必要があります。注釈の方法を宣言できます。まず注釈の例を見てみましょう。次に、その特性のいくつかについて説明します。
パッケージcom.journaldev.Annotations; java.lang.annotation.documented; import java.lang.annotation.elementType; import java.lang.annotation.inherited; import java.lang.annotation.retention; import java.lang.annotation.RetentionPolicy; Import Java.lang.Annotation.target; @documented@target(elementType.method)@enternited@retention(retentionPolicy.runtime)public @interface methodinfo {string著者()default 'pankaj';文字列date(); int Revision()デフォルト1;文字列コメント();}注釈法はパラメーターを運ぶことができません。
アノテーション方法の返品値タイプは、これらのタイプの基本タイプ、文字列、列挙、注釈または配列に限定されています。
注釈方法はデフォルト値を持つことができます。
注釈自体には、他の注釈の注釈に使用されるメタアノテーションを含めることができます。
メタアノテーションの4つのタイプは次のとおりです。
1。@ documented-この注釈がある要素は、Javadocのようなツールで文書化できることを示します。このタイプは、注釈付き要素を使用するという顧客の宣言に影響を与えるタイプに注釈を付けるために使用する必要があります。文書化された宣言が注釈付けされている場合、このタイプの注釈付き注釈は、注釈付きプログラムメンバーのパブリックAPIとして使用されます。
2。@target-このタイプの注釈が注釈を付けることができるプログラム要素の範囲を示します。このメタアノテーションの値は、タイプ、メソッド、コンストラクター、フィールドなどになります。ターゲットメタアノテーションが表示されない場合、定義された注釈はプログラムの任意の要素に適用できます。
3。@inherited-注釈型が自動的に継承されていることを示します。ユーザーが現在のクラスでこのメタアノテーションタイプと現在のクラスの宣言にこのメタアノテーションタイプが含まれていない場合、現在のクラスの親クラスに継承されたメタアノテーションがあるかどうかも自動的にクエリします。このアクションは、注釈タイプが見つかったことを知るために繰り返されます。または、上位レベルの親クラスがクエリがQueryedされます。
4.@保持- 注釈が保持される時間の長さを指定します。保持ポリティ値は、ソース、クラス、ランタイムです。
Javaビルトイン注釈
Javaは3つの組み込み注釈を提供します。
1。@Override-親クラスでメソッドを書き直したい場合は、この注釈を使用して、このメソッドを書き直すことをコンパイラに通知する必要があります。このようにして、コンパイラは、親クラスのメソッドが削除されるか、変更が発生したときにエラーメッセージをプロンプトします。
2。 @deprecated-メソッドが推奨されないことをコンパイラに知らせたい場合は、この注釈を使用する必要があります。 JavaはJavadocでのこの注釈を推奨しています。この方法が推奨されない理由と代替方法を提供する必要があります。
3。@SuppressWarnings-これは、ジェネリックでネイティブデータ型を使用するなど、特定の警告メッセージを無視するようコンパイラーに伝えるためだけです。その保持ポリシーはソース(翻訳者の注:ソースファイルで有効)であり、コンパイラによって破棄されます。
Javaの組み込み注釈の例を見てみましょう。上記のカスタム注釈を参照してください。
パッケージcom.journaldev.Annotations; java.io.filenotfoundexception; import java.util.arraylist; import java.util.list; public class annotationexample {public static void main(string [] args){} @override @methodinfo(著者= 'pankaj'、comments = 'maste'、date = 'method'、revision = 1)public string tostring(){return 'overriden toString method';} static void oldmethod(){system.out.println( 'old method、bout it not it。');} @suppresswarnings({'unchecked'、 'deprecation'}) @methodinfo(著者= 'pankaj'、comments = 'main method'、date = 'nov 17リストl = new ArrayList(); L.Add( 'ABC'); oldmethod();}}この例は自明であり、さまざまなシナリオで表示できると思います。
Javaアノテーション分析
反射技術を使用して、Javaクラスの注釈を解析します。その後、注釈保持がランタイムに設定する必要があります。そうしないと、Javaクラスの注釈情報は実行中に利用できないため、注釈に関連するデータを取得できません。
パッケージcom.journaldev.Annotations; java.lang.annotation.annotation; import java.lang.reflt.method; public class annotationParsing {public static void main(string [] args){try {for(method method:annotationParsing.class .getClassLoader().LoadClass(( 'com.journaldev.annotations.annotationexample').getmethods()){//チェックインの場合、チェックインのcheckksの場合、 (method.isAnnotationPresent(com.journaldev.annotations.MethodInfo.class)) { try { // iterates all the annotations available in the method for (Annotation anno : method.getDeclaredAnnotations()) { System.out.println('Annotation in Method ''+ method + '' : ' + anno); } methodinfo methodanno = method.getannotation(methodinfo.class); if(methodanno.revision()== 1){system.out.println( '修正no 1 ='+ method); }} catch(throwable ex){ex.printstacktrace(); }}}} catch(securityException | classNotFoundException e){e.printstacktrace(); }}}上記のプログラムを実行すると出力されます。
方法「パブリックjava.lang.string com.journaldev.annotations.annotationexpample.tostring() ': @com.journaldev.annotations.methodinfo(著者= pankaj、revision = 1、コメント=メイン方法、日付= 2012年11月17日)方法com.journaldev.annotations.annotationexample.tostring()annotation in method 'public static void com.journaldev.annotations.annotationexample.oldmethod()': @java.lang.deprecated()メソッド 'public static void com.journaldecampalle.oldmethod() @com.journaldev.annotations.methodinfo(著者= pankaj、revision = 1、comments = deprecated method、date = date = date = nov2012)改訂no 1 = public static void com.journaldev.annotations.annotationexample.oldmethod()Annotation in method 'public void com.journaldev.annotations.annotations.annotations.notations.annotations.annotations.notation java.io.filenotfoundexception ': @com.journaldev.annotations.methodinfo(著者= pankaj、revision = 10、コメント=メイン方法、日付= 2012年11月17日)
これがすべてこのチュートリアルであり、うまくいけば、それから何かを学ぶことができます。