首页 > 其他分享 >Annotation_demo

Annotation_demo

时间:2023-06-13 21:47:23浏览次数:42  
标签:java people demo age People sex public Annotation

参考:https://zhuanlan.zhihu.com/p/60730622

CheckAge.java

package com.hmb;

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckAge {
    int min() default 0;
    int max() default 100;
}

  

InitSex.java

package com.hmb;

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

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InitSex {
    enum SEX_TYPE { MAN, WOMAN};
    SEX_TYPE sex() default SEX_TYPE.MAN;
}

  

People.java

package com.hmb;

public class People {
    @CheckAge()
    private int age;

    @InitSex()
    private String sex;

    public People(int age, String sex) {
        this.age = age;
        this.sex = sex;
    }

    public People() {
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

  

Children.java

package com.hmb;

public class Children extends People {
    @CheckAge(max = 18)
    private int age;

    public void setAge(int age) {
        this.age = age;
    }
}

  

Main.java

package com.hmb;

import java.lang.reflect.Field;

public class Main {
    static void initSex(People people) {
        Field[] fields = People.class.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(InitSex.class)) {
                InitSex sex = field.getAnnotation(InitSex.class);
                try {
                    field.setAccessible(true);
                    field.set(people, sex.sex().toString());
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                System.out.println("finished init sex");
            }
        }
    }

    static boolean checkAge(People people) {
        Field[] fields = People.class.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(CheckAge.class)) {
                CheckAge checkAge = field.getAnnotation(CheckAge.class);
                try {
                    field.setAccessible(true);
                    int age = (int) field.get(people);
                    if (age < checkAge.min() || age > checkAge.max()) {
                        return false;
                    }
                    return true;
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }

        return false;
    }

    public static void main(String[] args) {
        People people = new People();
        System.out.println(people.getSex());
        initSex(people);
        System.out.println(people.getSex());

        people.setAge(-1);
        System.out.println(checkAge(people));
        people.setAge(101);
        System.out.println(checkAge(people));
        people.setAge(20);
        System.out.println(checkAge(people));

        System.out.println("==============");

        Children children = new Children();
        children.setAge(-1);
        System.out.println(checkAge(children));
        children.setAge(19);
        System.out.println(checkAge(children));
        children.setAge(7);
        System.out.println(checkAge(children));
    }
}

  

标签:java,people,demo,age,People,sex,public,Annotation
From: https://www.cnblogs.com/hemeiwolong/p/17478776.html

相关文章

  • React Native In Action中的demo的运行
     我用了最新的xcode和新的reactnative。Chapter6: Navigation这一章中的事例跑不起来,应该是程序用了就的版本的reactnavigation("react-navigation":"^2.0.1"),同时关于Navigation的用法也做了不小的改动,因此需要重新看相关文档改写。参考:https://reactnavigation.org/docs......
  • Condition类_demo
    参考:https://blog.csdn.net/u014082714/article/details/83927697https://blog.csdn.net/a1439775520/article/details/98471610Resource.javapackagecom.hmb;importjava.util.PriorityQueue;importjava.util.concurrent.locks.Condition;importjava.util.concurr......
  • 序列化和反序列化_demo
    参考:一文搞懂序列化与反序列化-知乎(zhihu.com)一、jdk序列化和反序列化module结构: FactInfo.javapackagecom.hmb;importjava.io.Serial;importjava.io.Serializable;publicclassFactInfoimplementsSerializable{@Serialprivatestaticfinall......
  • demosaicnet-master的包代码阅读笔记
    init.py我在学init用法时候的笔记该文件里面都是导入模块,其中从dataset.py是导入所有模块,因为模糊导入的__all__没有定义。from.modulesimportBayerDemosaickfrom.modulesimportXTransDemosaickfrom.mosaicimportxtransfrom.mosaicimportbayerfrom.mosaicim......
  • 手把手教你用Python做一个图像融合demo,小白可上手!
    1.创作背景说到融合,一下子会让我们这些95后想起来童年的动漫游戏王了!发动魔法卡——融合!哈哈,今天说得当然不是游戏王里的魔法了,但是我们使用的是Python魔法,今天我们将使用Python编程语言,以及自带的图像处理工具包进行图像融合操作,来实现图像融合的酷炫效果!前几天在网上看了一个dem......
  • Some demos of supervisor conf
    conffilesin/etc/supervisor/conf.d/VersionSupervisorisinstalledbyapt,andit'sversionis:sudosupervisord--version4.1.0ConffilesThereareDjangoprojects,FastAPIprojects,CelerybeatandworkerinthecloudserverDjangoProject......
  • jackson annotations注解详解(转)
    官方WIKI:https://github.com/FasterXML/jackson-databind/wikijackson1.x和2.x版本的注解是放置在不同的包下的1.x是在jacksoncorejar包org.codehaus.jackson.annotate下2.x是在jackson-databind包com.fasterxml.jackson.annotation下jackson的自动检测机制jackson允许使用任意......
  • JDK没有JAVAX.ANNOTATION.JAR包解决方案,无法使用@RESOURCE解决方案
    高版本JDK无法使用@Resource注解解决方案1.普通项目下载javax.annotation-api-1.3.2.jar,并在lib目录中引入即可2.Maven项目Maven项目:在pom.xml中进行配置<dependency><groupId>javax.annotation</groupId><artifactId>jsr250-api</artifactId><ver......
  • 通过 Demo 理解 hashCode 与 equals 的关系
    packagecom.heatdeath.object;importlombok.extern.slf4j.Slf4j;importjava.util.HashMap;importjava.util.Map;/***Author:heatdeath*Date:2018/4/19*Desc:*/@Slf4jpublicclassEqualsDemo{publicstaticvoidmain(String[]args){......
  • chatglm_langchain_demo
    #Setupenvirnmentcondacreate-nlangchainpython=3.8.1-ycondaactivatelangchain#拉取仓库gitclonehttps://github.com/imClumsyPanda/langchain-ChatGLM.git#安装依赖cdlangchain-ChatGLMpython3-mpipinstall-rrequirements.txtpython3-mpipinstal......