# JAVA Ch12. ギネス、列挙型、アニメーション[2]


目次

  • ギネス
  • 列挙型
  • デモ
  • 3.アニメーション[注釈]


    3.1]アニメとは何ですか。


    Javaを開発した人は、ソースドキュメントを単独で作成するよりも、ソースコードとドキュメントを1つのファイルとして管理したほうがいいと考えています.したがって,ソースコードに関する情報をソースコードのコメントに格納し,作成プログラムはソースコードのコメントからHTMLを生成する.
    注釈にはソースコードの説明があり、@のタグがあります.定義済みのタグを使用してコメントに情報を格納します.javadoc.これらの情報はexeというプログラムで読み込まれ、ドキュメントの作成に使用されます.
    この機能を適用すると、プログラムのソースコードに他のプログラムの情報が予め定められた形式で含まれます.これがプレゼンテーションです.プレゼンテーションの利点は,注釈のようにプログラミング言語に影響を及ぼさずに他のプログラムに有用な情報を提供できることである.
    例えば、@Test言語テストは方法の上で이 메서드를 테스트に行われる.これはテストプログラムに警告するだけで,メソッドを含むプログラム自体には何の影響もない.存在しない議長のように.
    @Test // 이 메서드가 테스트 대상임을 테스트 프로그램에게 알린다.
    public void method(){
    	...
    }
    このプログラムに予め定義された種類と形式で書かれているだけで意味がある.JDKが提供する標準プレゼンテーションは主にコンパイラに対して、コンパイラに役立つ情報を提供します.次に、新しいプレゼンテーションを定義するときに使用するメタデータを指定します.

    3.2]標準プレゼンテーション


    JAvaでは、ほとんど提供されていないプレゼンテーションがあります.彼らの一部は메타 애너테이션で、アニメーションのアニメーションを定義するためのアニメーションです.

    @Override


    メソッドの前にしか貼れない説明は、コンパイラに祖先のメソッドが誇張されていることを知らせる役割を果たしています.上書き時にエラーが発生する可能性があります.コンパイラは、新しい名前が追加されたメソッドにすぎないと考えています.実行時にエラーは発生せず、祖先のメソッドが呼び出されるため、どこが間違っているのかを見つけるのは難しい.
    class Child extend Parent{
    	@Override
    	void parentMethod(){
        ...
        }
    }
    上記のコードの前に@Overrideコメントを付けると、コンパイラは同じ名前のメソッドが祖先にあるかどうかを確認し、ない場合はエラーメッセージを出力します.

    @Deprecated


    新しい機能を追加すると、既存の不足している機能を改善することもできます.この過程で、既存の機能に代わるものが追加されても、すでに複数の場所で使用されている可能性のある既存のものを勝手に削除することはできません.したがって、使用されなくなったフィールドまたはメソッドに@Depractedコメントを追加します.これは、この追加のオブジェクトが別のオブジェクトに置き換えられていることを意味します.だから、これ以上使用しないことをお勧めします.
    この説明が付いているオブジェクトは使用しないことをお勧めしますが、強制性はありません.(実行できます.)

    @FunctionalInterface

    함수형 인터페이스を宣言するとき、この注釈を付けると、コンパイラは함수형 인터페이스を正しく宣言し、エラーの場合にエラーが発生したかどうかを確認します.必須ではありません.

    @SuppressWarnings


    コンパイラに表示される警告メッセージが表示されないようにします.警告メッセージのタイプには様々な種類があり、これらの警告メッセージのタイプを指定することで抑制することができます.
    バージョンが増えるにつれて、警告情報の種類が増えています.

    @SafeVarargs


    メソッドで宣言された可変パラメータタイプがnon-refiableタイプの場合、メソッドの宣言セクションと呼び出しセクションでunchecked警告が発行されます.コードに問題がない場合は、この警告を抑制するためにコメントを使用します.

    3.3]メタデータ


    メタデータは、補助手段として用いられる補助手段であり、補助手段を定義する際に補助手段の適用対象や維持時間などを指定する補助手段である.

    @Target


    アニメーションを適用するオブジェクトを指定します.複数の値を指定する場合は、配列に示すようにカッコ{}を使用します.

    @Retention


    アニメーションの期間を指定します.維持策の種類はSOURCE、CLASS、RUNTIMEなどである.

    @Documented


    プレゼンテーションに関する情報がjavadocで作成されたドキュメントに含まれていることを確認します.

    @Inherited


    アニメーションをサブクラスに継承します.@継承したアノテーションを祖先クラスに貼り付けると、サブクラスもアノテーションと同じと認識されます.

    @Repeatable


    通常、1つのオブジェクトにコメントを貼り付けますが、そのコメントを持つコメントは複数回貼り付けることができます.

    @Native


    これは、本方法で引用された상수 필드に貼られた説明書です.

    3.4]アニメーションタイプの定義


    新しいシナリオを定義する方法は次のとおりです.@記号を付ける以外は、インタフェースが定義されていることに等しい.
    	@interface 애너테이션이름{
        	타입 요소이름(); 
            ...
    	}
    @OverrideはAnation、OverrideはAnationタイプです.

    インパクトファクタ


    宣言の宣言方法は애너테이션의 요소(element)と呼ばれます.アニメーションの要素には戻り値があり、パラメータには抽象的なメソッドの形式があり、継承によって実現する必要はありません.ただし、アニメーションを適用する場合は、これらの要素の値を指定する必要があります.要素の名前も一緒に書いてあるので順番は関係ありません.
    @interface TestInfo{
    	int count();
        String testedBy();
        String[] testTools();
        TestType testType(); //enum TestType {FIRST,FINAL}
        DateTime testDate(); // 자신이 아닌 다른 애너테이션을 포함할 수 있다.
    }
    @interface DateTime{
    	String yymmdd();
        String hhmmss();
    }
    
    
    
    @TestInfo(
    	count = 3,testedBy = "Kim",
        testTools = {"JUnit","AutoTester"},
        testType = TestType.FIRST,
        testDate = @DateTime("160101","235959"}
    )
    public class NewClass{...}
    アニメーションの各要素には既定値を設定できます.アニメーションを適用するときに値を指定しない場合は、既定値を使用します.
    @interface TestInfo{
    	int count() defualt 1; //기본값 1
    }
    
    @TestInfo   // @TestInfo(count=1)과 동일
    public class NewClass{...}
    アニメーションの要素が1つしかなく、valueという名前の場合、アニメーションを適用するときに要素の名前を省略して値だけを書くことができます.要素のタイプが配列の場合、カッコ{}を使用して複数の値を指定できます.デフォルト値を指定する場合はカッコ{}も使用できます.(エレメントのタイプが配列であり、名前がvalueの場合、エレメントの名前は省略できます.)

    java.lang.annotation.Annotation


    すべてのアニメーションの祖先はAnnotationです.ただし,継承は許されないため,以下のようにAnnotationを祖先として明示的に指定することはできない.

    タグ補助タグタグタグAnnotation


    値を指定する必要がない場合は、プレゼンテーションの要素を定義しないことができます.タグコメントと呼ばれる要素が定義されていないコメント.

    プレゼンテーション要素のルール

  • 要素のタイプは、基本タイプ、String、Enum、プレゼンテーション、Class
  • のみです.
    パラメータは
  • ()内で宣言できません.
  • の例外を宣言することはできません.
  • 要素はタイプパラメータとして定義できません.