註解的使用實例

package com.franky.annotation;

/**
 * @描述 註解的應用實例
 * @作者 franky
 * @日期 2014-12-31 下午3:16:00
 */


//顯式指定註解值,如果數組屬性只有一個元素那麼可以省略大括號
@MyAnnotation(color = "red",value = "hello",arrValue=1,metaAnnotation=@MetaAnnotation("world"))
public class AnnotationTest {

	/**
	 * 每一個註解都是一個對象,java.lang包下的三個基本註解:
	 * @Override 方法覆蓋註解
	 * @SuppressWarnings 取消對方法的顯示警告
	 * @deprecated 方法過時註解
	 * 
	 */
	
	
	//給value()方法直接賦值,而color()方法已經有默認值
	@MyAnnotation("hello")
	public static void main(String[] args) {
		
		//調用過時方法
		show();
		
		//調用取消警告的方法
		suppressWarnings();
		
		//檢查是否帶有註解類
		boolean isAnnotation = AnnotationTest.class.isAnnotationPresent(MyAnnotation.class);
		//如果帶有註解,那麼獲取註解對象
		if(isAnnotation){
			MyAnnotation myAnnotation = AnnotationTest.class.getAnnotation(MyAnnotation.class);
			System.out.println(myAnnotation);
			//可以打印註解的屬性值
			System.out.println(myAnnotation.color());
			System.out.println(myAnnotation.arrValue().length);
			System.out.println(myAnnotation.enumAttr().nextNum().name());
			System.out.println(myAnnotation.metaAnnotation().value());
		}
		
	}
	
	//註明方法爲過時方法
	@Deprecated
	public static void show(){
		System.out.println("hello,world");
	}
	
	//過時方法註解,編譯器可以通過編譯
	@SuppressWarnings("deprecation")
	public static void suppressWarnings(){
		System.runFinalizersOnExit(true);
	}

}

自定義註解類MyAnnotation:

package com.franky.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 
 * @描述 自定義的註解類	
 * @作者 franky
 * @日期 2014-12-31 下午3:42:15
 */

/**
 * 自定義註解需要加入元註解(枚舉值),那麼編譯器在編譯時不會去掉註解
 * RetentionPolicy.SOURCE  保留在原文件
 * RetentionPolicy.CLASS   保留在class文件
 * RetentionPolicy.RUNTIME 保留到運行時
 * 
 * ElementType.METHOD 說明自定義的註解可應用在方法上
 * ElementType.TYPE   說明自定義的註解可應用的類型上
 * ElementType的各種枚舉值說明了註解可以加在哪些類型上
 * 
 * 註解的屬性類型包括8種基本屬性類型,String,Class,枚舉類型,
 * 或者上面這些類型的數組
 * 
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface MyAnnotation {
	//屬性的默認值
	String color() default "blue";
	//如果只有一個value方法需要賦值,那麼可以直接進行賦值
	String value();
	//數組屬性
	int[] arrValue() default {1,2,3};
	//枚舉屬性
	EnumAttr enumAttr() default EnumAttr.ONE;
	//註解屬性
	MetaAnnotation metaAnnotation() default @MetaAnnotation("metaAnnotation");
}

自定義的註解MetaAnnotation:

package com.franky.annotation;

/**
 * @描述 自定義的註解
 * @作者 franky
 * @日期 2014-12-31 下午5:08:02
 */
public @interface MetaAnnotation {
	String value() default "ok";
}


使用的枚舉類EnumAttr:

package com.franky.annotation;

/**
 * @描述 使用的枚舉類
 * @作者 franky
 * @日期 2014-12-31 下午5:09:15
 */
public enum EnumAttr {
	ONE {
		@Override
		public EnumAttr nextNum() {
			return TWO;
		}
	},
	TWO {
		@Override
		public EnumAttr nextNum() {
			return THREE;
		}
	},
	THREE {
		@Override
		public EnumAttr nextNum() {
			return ONE;
		}
	};
	public abstract EnumAttr nextNum();
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章