栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中的注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的注解

什么是注解(Annotation)
  1. Annotation是代码中的特殊标记。
  2. Annotation可以像修饰符一样被使用,用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。
  3. 在JavaSE中注解使用目的比较简单。例如标记过时的功能、忽略警告等。在JavaEE/Android中占据了更重要的角色。例如用来配置应用程序,代替JavaEE旧版中所遗留的繁冗的代码和XML配置
  4. 【注解】和【XML】是两种不同的配置模式,各有各的优劣,注解可以提供更大的便捷性,易于维护修改,但耦合度高,而 【XML】 相对于注解则是相反的。追求低耦合就要抛弃高效率,追求效率必然会遇到耦合。目前,许多框架将【XML】和【注解】两种方式结合使用,平衡两者之间的利弊。
  5. 框架 = 注解 + 反射 + 设计模式。
注解的用途
  1. 生成文档。通过代码里标识的元数据生成javadoc文档。
  2. 编译检查。通过代码里标识的元数据让编译器子啊编译期间进行检查验证。
  3. 编译时动态处理。编译时通过代码里标识的元数据动态处理,例如动态生成代码。
  4. 运行时动态处理。运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。
注解的分类
  1. Java自带的标准注解 ,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。
  2. 元注解 ,元注解是用于定义注解的注解,包括@Retention(标明注解被保留的阶段)、@Target(标明注解使用的范围)、@Inherited(标明注解可继承)、@documented(标明是否生成javadoc文档)。
  3. 自定义注解 ,可以根据自己的需求定义注解。
示例
package com.annotation_learning;

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

public class test_annotation {
    public static void main(String[] args) throws IllegalArgumentException, ReflectiveOperationException{
        Person p = new Person("1231asdas"); // 超过了最大长度
        for (Field field : p.getClass().getFields()) {
            Range range = field.getAnnotation(Range.class);
            if (range!=null) {
                Object value = field.get(p);

                if (value instanceof String) {
                    String s = (String) value;
                    if(s.length() < range.min() || s.length() > range.max()) {
                        throw new IllegalArgumentException("Invalid field: " + field.getName());
                    }
                    else {
                        System.out.println("没有越界");
                    }
                }
            }
        }
    }
}

class Person {
    @Range(min = 1, max = 5)
    public String name;

    public Person(String name) {
        this.name = name;
    }
}
@Retention(RetentionPolicy.RUNTIME) // 生命周期-整个RUNTIME
@Target(ElementType.FIELD) // 限制运用的场景
@interface Range {
    int min() default 0;
    int max() default 255;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号