反射模式--方法的反照m.invoke()版权声明

原创
小哥 3年前 (2022-11-11) 阅读数 4 #大杂烩

方法的名称和参数列表可以唯一地确定方法。
方法反射操作:method.invoke(对象,参数列表)
反射是框架底部的一些方法,如后所述。Spring重要特征DI:控制反转就是这样一个原理。至于为什么使用反射,1.首先,您可以通过任何对象获得类类型,即所有信息,这些信息只能在后面反映出来;2.例如,该方法的反射的好处是解耦。a,b,c对象被调用。 print()方法,通常的想法是创建每个对象,和。a.print() b.print() c.print() ,但如果使用反射 print()方法的对象.invoke(a,参数列表)使用您想要的对象。
package six;

import java.lang.reflect.Method;

/**

  • Created by lxq on 2017/9/19.
    */
    public class MethodDemo {
    public static void main(String[] args) {
    //想要获取print(int,int)
    //1.获取方法就是获取关于类的信息。---首先获取类的类类型。
    A a1 = new A();
    Class c = a1.getClass();
    //2.获取方法---要确定的名称和参数列表。
    try {
    //Method m = c.getMethod("print",new Class[]{int.class,int.class})
    Method m = c.getMethod("print",int.class,int.class);
    //使用该方法的反射操作。m对象进行方法调用。
    //和 a1.print(10,20);效果完全一样
    //反过来--用print此方法对象操作a1
    //如果没有返回值,则方法返回。null,否则返回特定的返回值。
    //m.invoke(a1,new Object[]{10,20});
    m.invoke(a1,10,20);//也可以使用数组

//另一种方法
Method m1 = c.getMethod("print",String.class,String.class);
m1.invoke(a1,"hello","world");

//没有参数的方法
Method m2 = c.getMethod("print");
m2.invoke(a1);

} catch (Exception e) {
e.printStackTrace();
}

}
}
class A{
public void print(int a,int b){
System.out.println(a+b);
}
public void print(String a,String b){
System.out.println(a.toUpperCase()+b.toUpperCase());
}
public void print(){
System.out.println("没有参数");
}
}


作者:lixq05
来源:CSDN
原文:https://blog.csdn.net/lixq05/article/details/78029653
版权声明:本文为博主原创文章。转载请附上博客链接!

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除