java 关于反射

先列出代码,再具体分析
code

Class cc=this.getClass();
Method meth= cc.getDeclaredMethod(methodName, Map.class);
Map<String, String> result = (Map<String, String>) meth.invoke(this, parameterMap);

过程分析
1、获取class的三种方式

  • Class c1= Class.forName("com.pang.demo.A");
  • A a = new A(); Class c2 = a.getClass();
  • Class c3= A.class();//在同一个类中也可以通过this.getClass()获取

第一种方法是通过类名获取,第二种是通过对象获取。需要注意的是,第一种方法中类名必须是完整的包括包名。
2、获取class中的方法,获取class的方法有两种方式:getDeclaredMethodgetMethod

  • getDeclaredMethod
    获取当前类和父类的所有声明的方法,包括public、protected和private修饰的方法,需要注意的是,这些方法一定是在当前类中声明的,从父类中继承的不算,实现接口的方法由于有声明所以包括在内。

  • getMethod 获取当前类和父类的所有public
    的方法,这里的父类指的是继承层次中的所有父类,比如所A继承B,B继承C,那么B和C都属于A的父类。获取当前类和父类的所有public的方法。

    如果是调用有参的方法则为getDeclaredMethod(methodName,Map.class)
    methodName表示调用的方法名,String是入参类型(无论哪种类型的入参,都是参数类型.class),传入这两个参数之后,便可以根据方法名和方法参数通过反射获取带有参数的方法
    3、通过调用invoke()执行方法,根据传入的对象实例,通过配置的实参参数来调用方法

扩展知识
反射的定义
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

你可能感兴趣的:(后端,java)