首页 > 其他分享 >Reflect

Reflect

时间:2022-10-24 14:33:38浏览次数:31  
标签:String Reflect 获取 User declaredConstructor c1 class

Java代码的三个阶段

注解与反射

注解

@Target({ElementType.TYPE,ElementType.METHOD})//表示注解的作用域
@Retention(RetentionPolicy.RUNTIME)//什么时候生效
@Documented//表示方法已经过时,但是还能用
@Inherited//表示子类可以继承
public @interface MyAnnotation {
String value() default "";
}

反射

一个类只有一个class对象

类被加载后,类的整个结构都被封装在class对象中

获取反射对象

  1. 通过路径

    Class<?> c1 = Class.forName("com.smu.User");
  2. 通过对象获取    
    Class<? extends User> aClass = user.getClass();
  3. 通过类名获取
    Class<User> userClass = User.class;
  4. 基本内置对象的封装类都有的TYPE属性
    Class<Integer> type = Integer.TYPE;

通过反射获取类的信息

获取类名  

  • String name = c1.getName();
  • String simpleName = c1.getSimpleName();

获取字段(带有Declared的是获取包括private的字段)

  • Field[] fields = c1.getFields();
  • Field username = c1.getField("username");
  • Field[] declaredFields = c1.getDeclaredFields();
  • Field username1 = c1.getDeclaredField("username");

获取方法(不带Declared是获取本类以及父类的public方法,带有Declared的是获得本类的所有包括private的方法)

  • Method[] methods = c1.getMethods();
  • Method getAge = c1.getMethod("getAge");
  • Method[] declaredMethods = c1.getDeclaredMethods();
  • Method setPassword = c1.getDeclaredMethod("setPassword", String.class);

获取构造器

  • Constructor<?>[] constructors = c1.getConstructors();
  • Constructor<?>[] declaredConstructors = c1.getDeclaredConstructors();
  • Constructor<?> declaredConstructor1 = c1.getDeclaredConstructor(String.class, String.class, Integer.class);

获取对象

通过class对象获取(需要有无参构造器,需要是public修饰的),通过构造器获取,如果是private修饰的需要setAccessible(true);

  • User o = (User) c1.newInstance();
  • o.setAge(12);
  • System.out.println("class对象获取"+o);
  • Constructor<?> declaredConstructor = c1.getDeclaredConstructor(String.class, String.class, Integer.class);
  • declaredConstructor.setAccessible(true);
  • User happy = (User) declaredConstructor.newInstance("happy", "889886", 21);
  • System.out.println("通过构造器获取"+happy);

 执行方法

可以通过类对象调用私有方法,也可以直接通过class对象获取方法

  • Constructor<?> declaredConstructor = c1.getDeclaredConstructor(String.class, String.class, Integer.class);
  • declaredConstructor.setAccessible(true);
  • Object happy1 = declaredConstructor.newInstance("happy", "889886", 15);
  • Method setUsername = c1.getDeclaredMethod("setUsername", String.class);
  • setUsername.invoke(happy1, "sjjshj");

标签:String,Reflect,获取,User,declaredConstructor,c1,class
From: https://www.cnblogs.com/happy12123/p/16816265.html

相关文章

  • ctfshow web101(反射类Reflectionclass的使用)
    <?php/*#-*-coding:utf-8-*-#@Author:h1xa#@Date:2020-09-1611:25:09#@LastModifiedby:h1xa#@LastModifiedtime:2020-09-2200:26:48#@link......
  • Reflection 反射
    Reflection反射反射的基本概念反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法Class<?>aClass=Class.forName("ming......
  • .NET教程 - 反射 & 元数据(Reflection & Metadata)
    更新记录转载请注明出处:2022年10月5日发布。2022年10月5日从笔记迁移到博客。反射(Reflection)介绍说明大多数情况下,我们都是运行程序集中的代码处理数据但有时需......
  • 反射(Reflection)的概念
    反射指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射......
  • Go系统库之reflect包
    Type接口PkgPath()string原文如下://PkgPathreturnsadefinedtype'spackagepath,thatis,theimportpath//thatuniquelyidentifiesthepackage,suchas"e......
  • [Go] Types - Reflect.TypeOf()
    Canusereflect.TypeOftogetvariabletypepackagemainimport( "fmt" "reflect")funcmain(){ //varageint=21 //varbbool=age>=23 varage......
  • java.lang.reflect.InvocationTargetException
    1.自定义BaseServlet时候,里面的方法应该是重新HttpServlet里的service方法,自己写成dogetdopost了,错误!2.mapper的xml配置文件,查询总数的方法selectTotalCount需要......
  • ReflectUtils
    packagecom.denkou.project.service.zxzy.utils;importcom.denkou.project.service.zxzy.exception.ApiException;importio.swagger.annotations.ApiModelProperty;......
  • golang反射reflect
    1reflect包reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,该函数返回一个Type类......
  • Unity3d反射(Reflection)
    无论是VR、AR,还是游戏开发,都绕不开反射材质,一些童鞋说用反射探测器(ReflectionProbe)制作反射,总感觉地板的反射不正确,本文小姐姐就这一话题,和大家一起探讨一下反射材质的制......