java5.0使用annotion注解

1.java5.0在java.lang包中定义了3种标准的annotation类型:

A.Override:

java.lang.Override是一个marker annotation类型,它被用作标注方法。它说明了被标注的方法重载了父类的方法,起到了断言的作用。如果



我们使用了这种annotation在一个没有覆盖父类方法的方法时,java编译器将以一个编译错误来警示。

B.Deprecated:

同样Deprecated也是一个marker annotation。当一个类型或者类型成员使用@Deprecated修饰的话,编译器将不鼓励使用这个被标注的程序元



素。

C.SuppressWarnings:

@SuppressWarnings被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。在java5.0,sun提供的javac编译器为我们提供了



-Xlint选项来使编译器对合法的程序代码提出警告,此种警告从某种程度上代表了程序错误。例如当我们使用一个generic collection类而又



没有提供它的类型时,编译器将提示出"unchecked warning"的警告。



2.新建一个注解

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

import java.lang.annotation.ElementType;



@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)



public @interface MyTag {   //与接口类似,只是多了一个@

	public enum FontColor {RED, GREEN, BLUE};   //声明一个枚举值

	String name();

	String value()  default "[aaaa]";   //设置其默认值

	FontColor fontColor() default FontColor.BLUE;

}



注意:

1./* @ Retention,表明注释信息将可以在运行时刻通过反射机制得到。如果不加入这个标签,上面的代码将没有任何输出。*/

2./*Target表示此类型的annotation 只能用于修饰方法声明。*/

3.如果只有一个属性时,可以只用写  value()方法,然后在方法前声明注解时不用写MyTag(value="aa"),而直接写成MyTag("adddd")



3.使用

package example;



import java.lang.annotation.Annotation;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import org.junit.Test;

public class TempTest {



	@Test

	@MyTag(name="aa", value = "da")

	public void test1(){

		List<String>  list1=new ArrayList<String> ();

		list1.add("aaa");

		List<String>  list2=new ArrayList<String> ();

		list2.add("aab");

		Collections.addAll(list1, new String [] {"1"});

//		

//		assertEquals("1",list1.get(1));

		getAnnotion();

	}

	

	/* 通过反射取得到该方法的所有注解*/

	private void getAnnotion(){

	         try {

	             Annotation[] annotation =this.getClass().getMethod("test1").getAnnotations();//取得注解所在方法,从而得到



所有注解

	             for (Annotation tag :annotation)   {   

	            	 if(MyTag.class.isAssignableFrom(tag.annotationType())){  //只输出是MyTag注解的内容

		               System.out.println("Tag is:" + tag);

		               System.out.println("tag.name()" + ((MyTag) tag).name());

		               System.out.println("tag.age()" + ((MyTag) tag).value());

	            	 }

	             }

	         } catch(NoSuchMethodException e) {

	             e.printStackTrace();

	         }



	}



	

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值