`

Java中annotation注解

    博客分类:
  • Java
阅读更多
1. Java中annotation注解

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");
    }
}
分享到:
评论

相关推荐

    Java.Annotation注解.part4

    Java.Annotation注解.part4

    Java.Annotation注解.part3

    Java.Annotation注解.part3

    Java.Annotation注解.part2

    Java.Annotation注解.part2

    Java.Annotation注解.part1

    Java.Annotation注解.part1

    java1.5 annotation注释源代码

    Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...

    Java Annotation注解技术

    Java Annotation注解技术是现代Java开发中不可或缺的一部分,它通过提供元数据增强了代码的表达能力,简化了代码的编写和维护,同时也促进了框架和工具的高效开发。了解和掌握注解技术对于提升Java开发的效率和质量...

    Java Annotation注解.doc

    Java Annotation,也称为注解,是Java编程语言中的一种元数据机制,用于向编译器、JVM或工具提供有关代码的附加信息。这些信息不直接影响代码的执行,但可以被编译器或运行时环境用来执行特定的操作,如代码分析、...

    Java 5 annotation 学习笔记

    Java 5引入的注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、JVM或其他工具在编译时或运行时使用。注解可以用来简化代码,提高可维护性,并帮助工具进行静态分析。 1. ...

    java之Annotation及其应用

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是一种描述数据的数据,可以提供有关代码的附加信息,而这些信息并不直接影响代码的执行。在Java中,注解用于向编译器、JVM或...

    Java注解Annotation验证

    Java注解Annotation用起来很方便,也越来越流行,由于其简单、简练且易于使用等特点,很多开发工具都提供了注解功能,不好的地方就是代码入侵比较严重,所以使用的时候要有一定的选择性。 这篇文章将利用注解,来做...

    Java自定义注解Annotation的使用

    ### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...

    java 注解annotation的使用以及反射如何获取注解

    Java注解(Annotation)是Java语言提供的一种元数据机制,用于向编译器或JVM提供额外的信息。这些信息可以用来验证代码、控制代码生成、配置应用等。注解是自Java 5版本引入的特性,它使得程序员可以在源代码中嵌入...

    Java Annotation

    Java Annotation(注解)是自 Java 5.0 开始引入的一种语言元素,它为开发者提供了在代码中添加元数据的能力。简单来说,注解就像是对代码进行标记或注释的方式,这些标记可以在编译时或者运行时被读取并执行特定的...

    Java 注解Annotation实例上手文档

    ### Java 注解Annotation实例上手文档 #### 一、引言与基础知识 Java注解(Annotation)自JDK 5.0引入以来,已经成为Java语言的重要特性之一,它为代码元数据提供了一种标准化的方式,使得编译器、工具和其他框架...

    java注解annotation.rar

    Java注解,也称为 Annotation,是Java编程语言中的一种元数据机制,用于向编译器、JVM(Java虚拟机)或工具提供有关代码的信息。这些信息可以用来进行编译时检查、运行时处理,或者作为配置信息。注解不是程序的一...

    Java Annotation(Java 注解)

    如果你想知道java annotation是什么?你可以看看

    spring的Annotation注解.

    ### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...

    Annotation注解的介绍和使用

    ### Annotation注解的深入解析与应用 #### 一、Annotation概览 ##### 1.1 何为元数据 元数据,在计算机科学中,是指用于描述数据的数据,它提供了关于数据本身的附加信息,有助于理解、解释和管理数据。在编程...

Global site tag (gtag.js) - Google Analytics