当前位置: 首页 > news >正文

第十八节:第七部分:java高级:注解的应用场景:模拟junit框架

什么是注解的解析以及如何解析注解

什么是注解的解析以及如何解析注解

代码:

解析注解的案例

解析注解的案例

代码:

MyTest2(注解)

package com.itheima.day10_annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest2 {String value();double aaa() default 100;String[] bbb();
}

Demo

package com.itheima.day10_annotation;
@MyTest2(value = "蜘蛛精",aaa = 99.5,bbb = {"至尊宝","黑马"})
public class Demo {@MyTest2(value = "孙悟空",aaa = 99.9,bbb = {"紫霞","牛夫人"})public void test1(){}
}

AnnotationTest2(主程序)

package com.itheima.day10_annotation;import org.junit.Test;import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Arrays;/*
* 目标:掌握注解的解析(解析类上的注解、解析方法上的注解)。
* */
public class AnnotationTest2 {@Testpublic void parseClass() {// 1、先得到Class对象Class c = Demo.class;// 2、解析类上的注解// 判断类上是否包含了某个注解if (c.isAnnotationPresent(MyTest2.class)) {MyTest2 mytest2 =(MyTest2) c.getDeclaredAnnotation(MyTest2.class);System.out.println(mytest2.value());System.out.println(mytest2.aaa());System.out.println(Arrays.toString(mytest2.bbb()));}}@Testpublic void parseMethod() throws Exception {// 1、先得到Class对象Class c = Demo.class;Method m = c.getDeclaredMethod("test1");//解析方法上的注解// 判断方法对象上是否包含了某个注解if (m.isAnnotationPresent(MyTest2.class)) {MyTest2 mytest2 =(MyTest2) m.getDeclaredAnnotation(MyTest2.class);System.out.println(mytest2.value());System.out.println(mytest2.aaa());System.out.println(Arrays.toString(mytest2.bbb()));}}
}

结果1

模拟Junit框架的案例

模拟Junit框架

MyTest(注解)

package com.itheima.day10_annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)// 注解只能注解方法。
@Retention(RetentionPolicy.RUNTIME)//让当前注解可以一直存活着。
public @interface MyTest {}

AnnotationTest3(主程序)

package com.itheima.day10_annotation;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*
* 目标:模拟Junit框架的设计。
* */
public class AnnotationTest3 {//@MyTestpublic void test1(){System.out.println("======test1======");}@MyTestpublic void test2(){System.out.println("======test2======");}@MyTestpublic void test3(){System.out.println("======test3======");}public static void main(String[] args) throws Exception {AnnotationTest3 a = new AnnotationTest3();//启动程序!// 1、得到Class对象Class c = AnnotationTest3.class;//2、提取这个类中的全部成员方法Method[] methods = c.getDeclaredMethods();// 3、遍历这个数组中的每个方法,看方法上是否存在@MyTest注解,存在//  触发该方法执行。for (Method method : methods) {if (method.isAnnotationPresent(MyTest.class)) {//说明当前方法上是存在@MyTest,触发当前方法执行method.invoke(a);}}}
}

结果

http://www.lryc.cn/news/595144.html

相关文章:

  • nextjs+react接口会请求两次?
  • 元宇宙与DAO自治:去中心化治理的数字文明实践
  • 【设计模式C#】简单工厂模式(用于简化获取对象实例化的复杂性)
  • 实时数据可视化的“心跳”设计:毫秒级延迟下的动态图表抗闪烁优化方案
  • 时空数据可视化新范式:基于Three.js的生产全流程时间轴回溯技术解析
  • 基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
  • 基于VSCode的nRF52840开发环境搭建
  • 机器学习中核心评估指标(准确率、精确率、召回率、F1分数)
  • 动态数据源切换
  • Android Jetpack系列组件之:LiveData(保姆级教程)
  • 动静态库原理与实战详解
  • Ubuntu 22 安装 ZooKeeper 3.9.3 记录
  • 【HarmonyOS】ArkUI - 声明式开发范式
  • 信息整合注意力IIA,通过双方向的轻量级注意力机制强化目标关键特征并抑制噪声,提升特征融合的有效性和空间位置信息的保留能力。
  • I2S音频的时钟
  • C/C++ 详谈结构体大小计算(内存对齐)
  • 移动端轻量级神经网络推理框架
  • 蚂蚁数科AI数据产业基地正式投产,携手苏州推进AI产业落地
  • 解决mac chrome无法打开本地网络中的内网网址的问题
  • ELN和LIMS的区别
  • Django关于ListView通用视图的理解(Cursor解释)
  • Java基础教程(010):面向对象中的this和就近原则
  • 算法训练营DAY37 第九章 动态规划 part05
  • 两个相机的视野 拼接算法
  • 【C++】stack和queue拓展学习
  • DevCon 6记录
  • 从 “能用“ 到 “好用“:中小制造企业数字化转型中的 IT 系统优化管理策略
  • 扬声器测试解决方案
  • AWS Certified Cloud Practitioner 认证考试总结
  • Centos安装最新docker以及ubuntu安装docker