Java中annotation注解_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java中annotation注解

Java中annotation注解

 2018/10/17 12:45:44  andrew7676  程序员俱乐部  我要评论(0)
  • 摘要:1.Java中annotation注解1.@Override注解,表示重写。publicclassOverrideTest{@OverridepublicStringtoString(){return"ThisisOverrideTest";}publicstaticvoidmain(String[]args){OverrideTesttest=newOverrideTest();System.out.println(test);}}运行结果:ThisisOverrideTest2
  • 标签:not Java Annotation 注解
1. Java中annotation注解
class="java" name="code">
1. @Override注解,表示重写。
public class OverrideTest{
    @Override
    public String toString(){
        return "This is OverrideTest";
    }
    public static void main(String[] args){
        OverrideTest test = new OverrideTest();
        System.out.println(test);
    }
}
运行结果:
This is OverrideTest

2. @Deprecated注解,表示不建议被使用
public class DeprecatedTest{
    @Deprecated
    public void doSomething(){
        System.out.println("do something!");
    }
    public static void main(String[] args){
        DeprecatedTest test = new DeprecatedTest();
        test.doSomething();
        Date date = new Date();
        System.out.println(date.toLocaleString());
    }
}
运行结果:
do something!
2015-7-6 23:07:50

3. @SuppressWarnings({"unchecked", "deprecation"})注解,表示压制警告
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
public class SuppressWarningsTest{
    @SuppressWarnings({"unchecked", "deprecation"})
    public static void main(String[] args){
        Map map = new TreeMap();
        map.put("hello", new Date());
        System.out.println(map.get("hello"));
        Date date = new Date();
        System.out.println(date.toLocaleString());
    }
}
运行结果:
Mon Jul 06 23:08:04 CST 2015
2015-7-6 23:08:04


2. 自定义annotation注解
自定义annotation:@interface表示定义一个注解。
用@AnnotationTest引用注解,如果注解中是用value来表示值的话,可以直接使用@AnnotationTest(EnumTest.Welcome) 来表示,否则必须使用完整的valuexxx=valueyyy来表示@AnnotationTest(value2 = EnumTest.Welcome)。
自定义注解:当注解中的属性名为value时,在对其赋值时可以不指定属性的名称而直接写上属性值即可;除了value以外的其他值都需要使用name=value这种赋值方式,即明确指定给谁赋值。

default "hello"是设置其默认值为hello,如果赋值就为所赋的值,否则就是hello。
注解中有几个value值,就必须对几个value值都进行赋值(或者有默认值)。

接口不继承注解。

当我们使用@interface关键字定义一个注解时,该注解隐含地继承了java.lang.annotation.Annotation接口;如果我们定义了一个接口,并且让该接口继承自Annotation,那么我们所定义的接口依然还是接口而不是注解;Annotation本身是接口而不是注解。可以与Enum类比。

public @interface AnnotationTest{
    String[] value1() default "hello";
    EnumTest value2();
}
enum EnumTest{
    Hello, World, Welcome;
}

@AnnotationTest(value2 = EnumTest.Welcome)
public class AnnotationUsage{
    @AnnotationTest(value1 = {"world", "ABCD"}, value2 = EnumTest.World)
    public void method(){
        System.out.println("usage of annotation");
    }
    public static void main(String[] args){
        AnnotationUsage usage = new AnnotationUsage();
        usage.method();
    }
}
运行结果:
usage of annotation


3. 注解可以修饰注解
Retention类
@Retention(RetentionPolicy.CLASS)
@Retention(RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.SOURCE)


import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.CLASS)
public @interface MyAnnotation{
    String hello() default "shengsiyuan";
    String world();
}

MyAnnotation(hello = "beijing", world = "shanghai")
public class MyTest{
    @MyAnnotation(hello = "tianjin", world = "shangdi")
    @Deprecated
    @SuppressWarnings("unchecked") 
    public void output(){
        System.out.println("output something!");
    }
}


RetentionPolicy.RUNTIME就可以读取到信息,用反射来读取MyTest.java的注解信息。
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class MyReflection{
    public static void main(String[] args) throws Exception{
        MyTest myTest = new MyTest();
        Class<MyTest> c = MyTest.class;
        Method method = c.getMethod("output", new Class[]{});
        if(method.isAnnotationPresent(MyAnnotation.class)){
            method.invoke(myTest, new Object[]{});
            MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
            String hello = myAnnotation.hello();
            String world = myAnnotation.world();
            System.out.println(hello + ", " + world);
        }
        Annotation[] annotations = method.getAnnotations();
        for(Annotation annotation : annotations){
        System.out.println(annotation.annotationType().getName());
        }
    }
}
运行结果:
output something!
tianjin, shanghai
test10.MyAnnotation
java.lang.Deprecated


@Target(ElementType.METHOD)表示只能修饰方法
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
public @interface MyTarget{
    String value();
}
public class MyTargetTest{
    @MyTarget("hello")
    public void doSomething(){
        System.out.println("hello world");
    }
}

@Documented注解 可以在产生帮助文档是将注解加到文档中
import java.lang.annotation.Documented;
@Documented
public @interface DocumentedAnnotation{
    String hello();
}
public class DocumentedTest{
    @DocumentedAnnotation(hello = "welcome")
    public void method(){
        System.out.println("hello world");
    }
}
发表评论
用户名: 匿名