Java注釈と実例を深く理解する

3676 ワード

Javaコメント
注釈は何ですか
Javaの注釈はJavaソースコードのメタデータであり、すなわち、注釈はJavaソースコードを記述するためのものである。基本的な文法は:@の後と注釈の名称です。
①Override:ある方法が親類を正しくカバーしているかどうかを識別する方法。
②Deprecated:このクラスのメンバーの使用はもう推奨されていません。これは注釈です。
③Suppres Warnings:警告情報等を抑制するために使用します。
注釈をよりよく理解するためには、自分で注釈を書いてもいいです。
@Target:注釈を制限するために使用できる場所。例えばクラスでも使えるし、方法で勝てる時は@Targetで制限できます。
@Retention:これは注釈コンパイルのクラスの状態を制御するためのもので、デフォルトはクラスにコンパイルされていますが、読みません。もう二つの状態はクラスにコンパイルしないということです。最後の一つはコンパイルが強すぎて、クラス反射で読めます。
@Dcumented:インターネットを利用して注釈を生成することができます。
@Inheited:サブクラスはコメントを引き継ぐことができますか?
以下は私達が自分で書いた注釈類です。

package cn.hncu.annotation;

import 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;

  @Inherited
  @Documented
  @Retention(RetentionPolicy.RUNTIME)
  @Target({ElementType.TYPE,ElementType.METHOD}) //  :              ,     @Target             
  public @interface MyAnno {
    public String schoolName() default "hncu"; //             
  }

テスト、勉強、使用

package cn.hncu.annotation;

import java.util.ArrayList;
import java.util.Collection;

@MyAnno
public class AnnotationHello {

  private String name="hncu";

  public static void main(String[] args) {
    System.out.println("hello");
  }

  @Override
  public String toString() {
    return super.toString();
  }

  @MyAnno(schoolName="   ")
  @Deprecated
  public void abc(){
    System.out.println("abc...");
  }

  @SuppressWarnings({ "rawtypes", "unchecked" })
  public void colDemo(){
    Collection col = new ArrayList();
    col.add("aa");
  }


  //  ,               
  @MyAnno(schoolName="      ")
  public void demo(){
    System.out.println("1111111");
  }

  @MyAnno //           schoolName      ,         。       ,         
  public void demo2(){
    System.out.println("1111111");
  }

  //@MyAnno("abc") //          value,           
  public void demo3(){
    System.out.println("33333333333");
  }

}

類反射で読み出す

package cn.hncu.annotation;

import java.lang.reflect.Method;

public class UseMyAnno {
  public static void main(String[] args) {
    try {
      Class c = Class.forName("cn.hncu.annotation.AnnotationHello");

      //           (@MyAnno)
      boolean boo = c.isAnnotationPresent(MyAnno.class);
      System.out.println("        :"+boo);

      Method ms[] = c.getDeclaredMethods();
      for(Method m: ms){
        //            (@MyAnno)
        if(m.isAnnotationPresent(MyAnno.class)){
          System.out.println("      :"+m.getName());

          //             ---- m        ,            
          MyAnno ma = (MyAnno)m.getAnnotation(MyAnno.class);
          System.out.println("    :=="+ma.schoolName());
          //          ,            
        }
      }

    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
}

疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。