Annotation宣言1

18409 ワード

Annotation名


基本構成:@Entity@:Annotationと命名
Entity:このアニメーションの名前

Annotation要素(Element)


JAva宣言には、属性またはパラメータの程度と見なす値を設定できる要素がいくつかあります.@Entity(tableName = "vehicles")はtableNameという要素を表し、値はvehicleです.
要素が1つしかない場合は、@tableName("vehicles")に減らすことができます.
複数の要素がある場合Entity(tableName = "vehicles", primaryKey = "id")と表すことができる

Annotation宣言位置(Placement)


ノイズは、クラス、インタフェース、メソッド、メソッドパラメータ、フィールド、領域変数の上に配置できます.
クラスの上に宣言します.
@Entity
public class Vehicle {
}
使用例
@Entity
public class Vehicle {

    @Persistent
    protected String vehicleName = null;

    @Getter
    public String getVehicleName() {
        return this.vehicleName;
    }

    public void setVehicleName(@Optional vehicleName) {
        this.vehicleName = vehicleName;
    }

    public List addVehicleNameToList(List names) {
        @Optional
        List localNames = names;

        if(localNames == null)
            localNames = new ArrayList();
        localNames.add(getVehicleName());

        return localNames;
    }
}

JAvaデフォルトで提供されるプレゼンテーション

  • @Deprecated
  • @Override
  • @SuppressWarnings
  • @Deprecated


    これは、プレゼンテーションを含む対応するクラス/メソッドなどを使用しないで、サポートされていない、悪い、またはより良い方法があることを意味します.
    この宣言付きオブジェクトを使用している場合、Javaコンパイラは警告を出力します.

    @Override


    スーパークラスにはちょっとひどいとはっきり言っています.したがって、メソッドがスーパークラスと一致しない場合、出力エラー
    public class MySuperClass { 
        public void doTheThing() { 
            System.out.println("Do the thing");
        }
    } 
    
    public class MySubClass extends MySuperClass{
        @Override
        public void doTheThing() { 		
            System.out.println("Do it differently");
        }
    }
    @Overrideを使用するのは強みではありませんが、使用を指します.
    スーパークラスが変更されると、コンパイラはメソッドの上書きを行っているかどうかを通知します.そのため、変更点を簡単にチェックできます.

    @SuppressWarnings


    この方法に対してコンパイラsuppress警告(コンパイラ警告の抑制)を生成する.コードから出力される警告メッセージを無視できます.
    @SuppressWarnings
        public void methodWithWaring(){
    }

    個人アニメーションの作成


    クラスやインタフェースのように独自のファイルに定義された個人用のプレゼンテーションを作成できます.
    @interface MyAnnotation {
        String value();
        String name();
        int age();
        String[] newNames();
    }
    魏雅婷は4つの要素を持っていて、名前はAnnotationです
    @interfaceキーワードjavaコンパイラにコードが宣言定義であることを示す
    要素はインタフェースのメソッド定義に似ています
    使用
    @MyAnnotation(
        value="123",
        name="woonsik",
        age=26,
        newNames={"woonsik", "byeori"}
    )
    public class myClass{
    }
    上記の使用例に示すように、各要素に必要な値を指定して使用できます.

    要素Default値

  • 要素のデフォルト値
  • を設定できます.
  • のデフォルト値を設定場合、その要素に
  • の値を入力する必要はありません.
    @interface MyAnnotation{
        String value() default"";
        
        String name();
        int age();
        String[] newNames();
    }
    
    @MyAnnotation(
        name="woonsik",
        age=26,
        newNames={"woonsik","byeori"}
    )
    public class MyClass{
    }

    @Retention

  • キーワード
    SOURCE:宣言情報はコンパイル時に消失し、バイトコードには存在しない ex) @Override, @SuppressWarnings CLASS:クラスファイルに存在し、コンパイラによって使用され、実行時に消失 RUNTIME:運転時、JVMがノイズ情報を参照することができる。Java replicationで使用
  • は、匿名情報をどのくらい保持するかを設定するために使用できます.
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
        String value() default "";
    }

    @Target

  • では、自分で作成したプレゼンテーションで使用するjava要素
  • を指定できます.
    既存@ターゲットリスト
    ElementType.ANNOTATION_TYPE
    ElementType.CONSTRUCTOR
    ElementType.FIELD
    ElementType.LOCAL_VARIABLE
    ElementType.METHOD
    ElementType.PACKAGE
    ElementType.PARAMETER
    ElementType.TYPE
    Java 8から追加された@Target
    ElementType.TYPE_PARAMETER
    ElementType.TYPE_USE;
    TYPEとは?
  • TYPEはクラス作成時のタイプ変数
  • である.
    使用
    import java.lang.annotation.Target;
    import java.lang.annotation.ElementType;
    
    @Target(ElementType.TYPE_PARAMETER)
    public @interface MyAnnotation {
        String value() default "";
    }

    @Inherited


    @Inherited Anotationを使用するスーパークラスを継承するサブクラスにも対応するAnotationが必要です
    java.lang.annotation.Inherited
    
    @Inherited
    public @interface MyAnnotation {
    }
    
    @MyAnnotation
    public class MySuperClass{
    }
    
    public calss MySubClass extends MySuperClass {
    }
    여기서 MySubClass클래스는 @MyAnnotation을 상속받는다

    @Documented


    @Documented宣言指定したターゲットのJavaDocにこの宣言の存在をマークする
    java.lang.annotation.Documented
    
    @Documented
    public @interface MyAnnotation {
    }
    
    @MyAnnotation
    public class MySubClass{
    }
    MySubClass클래스는 JavaDoc에서 @Documented를 표시하게 된다