首页 > 其他分享 >注解与反射

注解与反射

时间:2023-03-17 11:47:48浏览次数:33  
标签:反射 name SuppressWarnings value User 注解 class

注解与反射

注解

内置注解

@Override

  • 定义在 java.lang.Override 中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明

@Deprecated

  • 定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择

@SuppressWarnings

  • 定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息,与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的
    • @SuppressWarnings("all")
    • @SuppressWarnings("unchecked")
    • @SuppressWarnings(value={"unchecked","deprecation"})
    • 等等

元注解

解释其他注解的注解

//Target 表示我们的注解可以用在哪些方
@Target(value = {ElementType.METHOD,ElementType.TYPE})

//Retention 表示我们的注解在什么地方还有效
// runtime>class>sources
@Retention(value = RetentionPolicy.RUNTIME)

//Documented表示是否将我们的注解生成在JAVAdoc中
@Documented

//Inherited 类可以继承父类的注解
@Inherited

//定义一个注解
@interface MyAnnotationf{
    
}

自定义注解

格式:public @interface 注解名{注解内容}

如果在类中定义注解需去掉public

@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
//定义一个注解
@interface MyAnnotationf{
    //定义参数后注解不能为空,除非有默认值,如果参数只有value,则使用注解使可不标明参数名
    String name() default "默认值";
}

反射

获取class类的常用方法

获取class类的常用方法

可以有Class对象的类型

  • class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类
  • interface:接口
  • []:数组
  • enum: 枚举
  • annotation:注解@interface
  • primitive type: 基本数据类型
  • void

动态创建对象

//获得class对象
Class cl = Class.forName("class对象所在的包名");

//构造一个对象
User user = (User)clnewInstance(); 
//本质是调用了类的无参构造器,如果没有设置无参构造器则会报错
System.out.println(user);

//通过构造器创建对象
Constructor constructor = cl.getDeclaredConstructor(String.class, int.class, int.class);
User user2= (User)constructor.newInstance( "Die Mongsheng",001,18);
System.out.printIn(user2);

//通过反射调用普通方法
User user3 = (User)c1.newInstance();
//通过反射获取一个方法
Method setName = cl.getDeclaredMethod("setName",String.class);
//invoke : 搬活的意思,(对象 ,"方法的做")
setName.invoke(user3,"Die Mongsheng");
System.out.println(user3.getName());

//通过反射操作属性
User user4 = (User)c1.newInstance(0;Field name = clgetDeclaredField("name");
//不能直接操作私有属性 ,我们需要关闭程序的安全检测 ,属性或者方法的setAccessible(true)
name.setAccessible(true);
name.set(user4,"Mongsheng");
System.out.println(user4.getName());

获取注解

用getAnnotation()获取某类、方法、字段的注解

标签:反射,name,SuppressWarnings,value,User,注解,class
From: https://www.cnblogs.com/zhao19811103/p/17226094.html

相关文章

  • springboot自动导入@Data注解无效问题
    随手敲个项目,发现@Data注解一直爆红,idea提示导入,但是我已经导入了  于是我又到pom文件里面查找问题,发现一个sql依赖导致了pom顶部标签爆红pom未修改前是这样的 ......
  • Mybatis:Mybatis注解实现动态SQL注意事项
    1.使用<script>声明动态SQL@Select("<script>"+"select*fromUser"+"<where>"+"id=#{id}"+"</where>"+"</script>")Usersel......
  • 反射获取成员方法method
    publicclassMethodDemo{publicstaticvoidmain(String[]args)throwsClassNotFoundException,NoSuchMethodException,SecurityException,Instant......
  • Spring Study-lesson08 使用注解开发-03-16
    第一:使用注解开发必须导入AOP的包加载依赖了。spring-webmvc第二:在使用注解需要导入context约束,增加注解的支持 在beans.xml文件中第三:@component //@component组......
  • 每天进步一点点-类型注解
    #!/usr/bin/envpython#-*-coding:utf-8-*-#author:SunXiuWen#datetime:2021/12/270027"""常用类型提示int,long,float:整型,长整形,浮点型;bool,str:布尔......
  • Lombok 中的 @Slf4j 注解
    Lombok是一种Java库,它可以通过注解来消除Java类中的样板代码,例如getter和setter方法、构造函数和equals/hashCode实现等。Lombok可以帮助Java开发人员编写更简洁、更干净的......
  • @Transaction注解的失效场景
    作者:京东物流孔祥东背景事情是这样,最近在实现一个需求的时候,有一个定时异步任务会捞取主表的数据并置为处理中(为了防止任务执行时间过长,下次任务执行把本次数据重复捞取),然......
  • 反射
    反射class类创建方式packagecom.zhang.annotation;publicclassTest01{publicstaticvoidmain(String[]args)throwsClassNotFoundException{Per......
  • 注解
    注解1.内置注解@Override:重写@Deprecated:用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素@SuppressWarnings:需添加参数:@SuppressWarnings("all")用来抑制编译时的警告......
  • Python反射机制
    Python反射机制1.Python反射机制反射使得程序具有在运行时动态修改自己的结构和行为的能力,比如导入模块,调用函数等等,这些都是python的反射机制,是一种编程方法,设计模式的......