天天看點

自定義Annotation

自定義Annotation

早就知道jdk5加了新特性Annotation,但是沒研究過,前幾天公司教育訓練,有一部分是介紹jdk5新特性的,一個是注解一個泛型

今兒複習一下注解

    //用@Deprecated聲明該方法不建議使用

    @Deprecated public void doSomething1(){

        Map map = new HashMap();

        map.put("some", "thing");

        System.out.println(map);

    }

    //用@SuppressWarnings聲明不再進行類型檢查

    @SuppressWarnings(value={"unchecked"})

    public void doSomething2(){

寫一個自定義注解先

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

//要在運作時使用這個注解,必須聲明成RUNTIME

Annotation分為三種級别:RUNTIME、CLASS、SOURCE

@Retention(RetentionPolicy.RUNTIME)

public @interface SomeAnnotation{

    String value();

    String name();

}

下面來使用這個自定義注解:

import java.lang.reflect.Method;

public class AnnotationTest {

    @SomeAnnotation(value="value1",name="name1")

    public void doSomething3(){

    public static void main(String[] args){

        Class<AnnotationTest> c = AnnotationTest.class;

        try {

            //利用反射得到方法doSomething3

            Method method = c.getMethod("doSomething3");

            //查找doSomething3方法是否有SomeAnnotation的Annotation

            if(method.isAnnotationPresent(SomeAnnotation.class)){

                System.out.println("找到SomeAnnotation");

                //得到SomeAnnotation

                SomeAnnotation annotation = method.getAnnotation(SomeAnnotation.class);

                System.out.println("annotation.value="+annotation.value());

                System.out.println("annotation.name="+annotation.name());

            }else{

                System.out.println("沒有找到omeAnnotation");

            }

        } catch (SecurityException e) {

            e.printStackTrace();

        } catch (NoSuchMethodException e) {

        }

輸出結果:

找到SomeAnnotation

annotation.value=value1

annotation.name=name1

本文轉自 dogegg250 51CTO部落格,原文連結:http://blog.51cto.com/jianshusoft/635043,如需轉載請自行聯系原作者

繼續閱讀