java 注解 异常 获取注解的属性值

该博客介绍了Java中的注解(@Id)及其使用,包括注解的目标(ElementType)和保留策略(RetentionPolicy)。通过示例展示了如何在类上定义和使用注解,并通过反射机制检查注解的存在及属性值。同时,代码中包含了对类中属性的验证过程。
摘要由CSDN通过智能技术生成
package zhujie;

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

@Target(ElementType.TYPE)//此注解只能使用在类上
@Retention(RetentionPolicy.RUNTIME)//此注解存储在class文件中并且可以被反射机制读取
public @interface Id {
    String value() default "China";
    int id();
}


package zhujie;

import java.lang.reflect.Field;

@Id
public class AnnotationTset {
    int id;
    String name;
    double height;

    public static void main(String[] args) {
        try {
            Class<?> aClass = Class.forName("zhujie.AnnotationTset");
            Field[] declaredFields = aClass.getDeclaredFields();
            boolean isOK=false;
            for (Field f:declaredFields
                 ) {
                if("int".equals(f.getType().getSimpleName())&&"id".equals(f.getName())){
                    isOK=true;
                }
            }
            if(!isOK){
                throw new Exception("被注解的类中不含id整个属性或者id这个属性的类型不是int");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

package zhujie;
public class Exception extends java.lang.Exception {
    public Exception(){

    }

    public Exception(String message) {
        super(message);
    }
}

获取注解的属性值

package zhujie;

import java.lang.reflect.Field;

@Id(id=10)
public class AnnotationTset {
    int id;
    String name;
    double height;

    public static void main(String[] args) {
        try {
            Class<?> aClass = Class.forName("zhujie.AnnotationTset");
            boolean annotationPresent = aClass.isAnnotationPresent(Id.class);
            System.out.println(annotationPresent);
            if(annotationPresent){
                Id annotation = aClass.getAnnotation(Id.class);
                System.out.println(annotation.value());
                System.out.println(annotation.id());
            }
            Field[] declaredFields = aClass.getDeclaredFields();
            boolean isOK=false;
            for (Field f:declaredFields
                 ) {
                if("int".equals(f.getType().getSimpleName())&&"id".equals(f.getName())){
                    isOK=true;
                }
            }
            if(!isOK){
                throw new Exception("被注解的类中不含id整个属性或者id这个属性的类型不是int");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值