精华内容
下载资源
问答
  • 反射中的invoke方法
    千次阅读
    2021-02-12 11:52:39

    展开全部

    就是调用类中的方法e68a843231313335323631343130323136353331333365646239,最简单的用法是可以把方法参数化,invoke(class, method)比如你Test类里有一系列名字相似的方法setValue1、setValue2等等。可以把方法名存进数组v[],然后循环里invoke(test,v[i]),就顺序调用了全部setValue

    如:public class  MyTest{ public static void main(String[] args) { String [] names ={"tom","tim","allen","alice"};

    Class> clazz = Test.class; try   Method method = clazz.getMethod("sayHi", String.class);for(String name:names)method.invoke(clazz.newInstance(),name);} catch (NoSuchMethodException e) e.printStackTrace(); } catch (IllegalAccessExcepti e.printStackTrace( } catch (IllegalArgumentException  {e.printStackTrace();} catch (InvocationTargetException e)e.printStackTrace(); } catch (InstantiationException e {e.printStackTrace( }class Test{public void sayHi(String name){ System.out.println("Hi "+name); }

    更多相关内容
  • java反射invoke方法

    千次阅读 2021-03-05 18:03:44
    以下代码简单地介绍了java反射中invoke方法packageorg.curry.tool;importjava.lang.reflect.Method;publicclassInvokeMethods{publicstaticvoidmain(String[]args){Employeeemp=newEmployee(...

    invoke,就是通过函数名反射调用相应的函数。以下代码简单地介绍了java反射中invoke方法

    package org.curry.tool;

    import java.lang.reflect.Method;

    public class InvokeMethods {

    public static void main(String[] args) {

    Employee emp = new Employee();

    Class cl = emp.getClass();//是Class,而不是class

    // getClass获得emp对象所属的类型的对象,Class就是描述类的类

    // Class是专门用来描述类的类,比如描述某个类有那些字段,方法,构造器等等!

    try {

    // getMethod方法第一个参数指定一个需要调用的方法名称,这里是Employee类的setAge方法,

    // 第二个参数是需要调用方法的参数类型列表,是参数类型!如无参数可以指定null或者省略

    // 该方法返回一个方法对象

    //参数必须和方法中一样,int和Integer,double和Double被视为不同的类型

    Method sAge = cl.getMethod("setAge", new Class[] { int.class });

    Method gAge = cl.getMethod("getAge", null);

    Method pName = cl.getMethod("printName", new Class[] { String.class });

    Object[] args1 = { new Integer(25) };

    // invoke方法中,第二个参数为参数列表,该参数列表是一个object[]数组

    // emp为隐式参数该方法不是静态方法必须指定

    sAge.invoke(emp, args1);//通过setter方法赋值

    Integer AGE = (Integer) gAge.invoke(emp, null);//通过getter方法返回值

    int age = AGE.intValue();//Integer转换成int

    System.out.println("The Employee Age is: " + age);

    Object[] args3 = { new String("Jack") };

    pName.invoke(emp, args3);

    } catch (Exception e) {

    e.printStackTrace();

    }

    System.exit(0);

    }

    }

    class Employee {

    // 定义一个员工类

    public Employee() {

    age = 0;

    name = null;

    }

    // 将要被调用的方法

    public void setAge(int a) {

    age = a;

    }

    // 将要被调用的方法

    public int getAge() {

    return age;

    }

    // 将要被调用的方法

    public void printName(String n) {

    name = n;

    System.out.println("The Employee Name is: " + name);

    }

    private int age;

    private String name;

    }

    项目代码:

    /**

    *利用keyName来对以search作为查询条件的结果集进行过滤

    /

    public Map getMap(Search search,String keyName){

    List entities=this.getBaseDao().search(search, DaoParam.SEARCH_OPTION_NORMAL);

    Map map=new LinkedHashMap();

    //通过参数keyName获得get方法名,比如getName,getAge

    String methodName="get"+keyName.substring(0,1).toUpperCase()+keyName.substring(1);

    for(T entity:entities){

    Object key=null;

    try {

    //getter方法不需要参数

    Method method=entity.getClass().getMethod(methodName);

    //反射调用方法

    key=method.invoke(entity);

    if(key instanceof BasePojo){

    //如果getter方法返回的是BasePojo类,那么以该BasePojo的id作为key

    key=((BasePojo>)key).getId();

    }

    map.put(key, entity);

    } catch (Exception e) {

    logger.error(e,e);

    }

    }

    entities=null;

    return map;

    }

    展开全文
  • 作者:码上猿梦cnblogs.com/daimajun/p/6545533.html推荐阅读(点击即可跳转阅读)先讲一下java反射反射...在比较复杂的程序或框架来使用反射技术,可以简化代码提高程序的复用性。讲的是Method类的invoke()方...

    点击上方“后端技术精选”,选择“置顶公众号”

    技术文章第一时间送达!

    作者:码上猿梦

    cnblogs.com/daimajun/p/6545533.html

    推荐阅读(点击即可跳转阅读)

    先讲一下java中的反射:

    反射就是将类别的各个组成部分进行剖析,可以得到每个组成部分,就可以对每一部分进行操作。在比较复杂的程序或框架中来使用反射技术,可以简化代码提高程序的复用性。

    讲的是Method类的invoke()方法。

    68bfdf3476ef0c6acd06a67b23f67ce1.gif

    既然是讲invoke方法,那就不讲怎么使用反射了,代码上来先:

    package online;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import org.junit.Test;public class Msym{    public void test(String[] arg){        for (String string : arg) {            System.out.println(string);        }    }    @Test    public void demo1() throws Exception{        //获取字节码对象        Class clazz = (Class) Class.forName("online.Msym");        //获取一个对象        Constructor con =  clazz.getConstructor();        Msym m = (Msym) con.newInstance();        String[] s = new String[]{"aa","bb"};        //获取Method对象        Method method = clazz.getMethod("test", String[].class);        //调用invoke方法来调用        method.invoke(m, s);    }}

    测试会报错:

    68bfdf3476ef0c6acd06a67b23f67ce1.gif

    红色框框显示是参数错误,test方法需要是字符串数组啊,我传递也是字符串数组,怎么就不对了??

    让我们来看一下invoke方法:

    68bfdf3476ef0c6acd06a67b23f67ce1.gif

    invoke方法的参数,一个是Object类型,也就是调用该方法的对象,

    第二个参数是一个可变参数类型,这个可变参数类型怎么能传递给一个数组类型呢?一个是多个参数。一个是一个数组参数,显然参数的个数不匹配,怎么解决呢?

    解决办法就是将可变参数变成一个参数:

    将传递进去的s强转为Object类型

    将s重新包装成一个Object数组

    测试一下:

    68bfdf3476ef0c6acd06a67b23f67ce1.gif

    结果可行。

    看到这里了,关注一个?

    68bfdf3476ef0c6acd06a67b23f67ce1.gif

    原文始发于微信公众号(后端技术精选):对于反射中的invoke()方法的理解

    展开全文
  • 主要介绍了详解JavaMethod的Invoke方法,需要的朋友可以参考下
  • invoke方法的过程: 深入解析Java反射(2) - invoke方法
    展开全文
  • 后边的.class 是add方法的参数的类型类 meth.invoke(li, "123" ); for (String str:li) { System.out.println(str); } Class <?> c=Class.forName("com.swift.ADemo" ); ADemo a = (ADemo) c.newInstance()...
  • Java反射之Method的invoke方法实现

    千次阅读 2020-11-11 21:55:35
    在框架经常会会用到method.invoke()方法,用来执行某个的对象的目标方法。以前写代码用到反射时,总是获取先获取Method,然后传入对应的Class实例对象执行方法。然而前段时间研究invoke方法时,发现invoke方法居然...
  • java反射中invoke方法

    2020-01-07 00:06:04
    1、invoke是Method类下的方法,只有方法才能调用invoke方法, 2、invoke方法的含义:反射调用...4、invoke方法的参数含义:第一个参数的含义是:实例对象,第二个方法的含义是:调用invoke方法方法中的参数值。 ...
  • 主要介绍了Java反射机制及Method.invoke详解,本文讲解了JAVA反射机制、得到某个对象的属性、得到某个类的静态属性、执行某对象的方法、执行某个类的静态方法等内容,需要的朋友可以参考下
  • 反射invoke方法

    千次阅读 2017-08-13 18:45:41
    当获得类对应的Class对象后,可以通过getMethods()...可以通过Method对象的invoke()方法来调用它对应的方法。 Object invoke(Object obj, Object...args): obj是执行该方法的Class对象,args是执行该方法时传入的实参。
  • java反射invoke方法的使用

    千次阅读 2020-03-26 08:25:11
    invoke 主要是用来调用某个类方法的,但是他不是通过当前类直接去调用而是通过反射的机制去调用。 在这之前我们先新建一个实体类,一会会用到。 public class TestMode { private static final String TAG =...
  • 反射invoke()方法

    千次阅读 2014-08-28 18:10:20
    java反射invoke()方法   invoke()方法:  主要是为了类反射,可以在不知道具体类的情况下,根据配置字符串去调用一个类的方法。最简单的方法是可以把方法参数化。    main.invoke():  比如Test类里有...
  • 最近工作涉及到获取同程火车票,大概描述为:将本地获取的发出城市,目的城市及出发时间按固定格式封装,调用接口获取可乘坐座席等级最高的火车票,接口返回数据用包含三层类封装的类接受,接受的类总共为四层,...
  •  首先Method类代表一个方法,所以invoke(调用)就是调用Method类代表的方法。它可以让你实现动态调用,例如你可以动态的传人参数。下面是一个简单的例子。 1 2 3 4 5 6 7 8
  • 反射invoke的使用

    2021-05-30 15:57:15
    //方法反射类的实例 method.invoke(hello, "好好讲话"); } java 类方法都有一个默认无参的构造方法,即使你没有创建,它都有一个构造方法 运用反射调用类的私有方法 ...
  • Java反射invoke()方法

    千次阅读 2019-04-23 20:13:13
    invoke方法用来在运行时动态地调用某个实例的方法。它的实现如下: @CallerSensitive public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, ...
  • java反射之Method的invoke方法实现

    万次阅读 多人点赞 2018-07-29 00:31:48
    在框架经常会会用到method.invoke()方法,用来执行某个的对象的目标方法。以前写代码用到反射时,总是获取先获取Method,然后传入对应的Class实例对象执行方法。然而前段时间研究invoke方法时,发现invoke方法居然...
  • 最近做项目用到定时任务...在执行invoke方法的时候,一直报空指针异常,百度了一下午才找到解决方案。现在把解决方法分享给大家。先看下代码:首先是一个测试类:@Testpublic void test() {String classBeanName = "...
  • 一个最简单的C#反射实例,首先编写类库如下: namespace ReflectionTest { public class WriteTest { //带参数的公共方法 public void WriteString(string s, int i) { Console.WriteLine("WriteString:" + s +...
  • 请求 login.action StrutsPrepareAndExecuteFilter 会解析 struts.xml 文件 检索 action name 为 login 的 Action 根据 class 属性创建 SimpleLoginAction 实例 使用 invoke 方法调用 execute 方法 反射是各种...
  • Java反射中Method类invoke方法的用法

    千次阅读 2021-02-26 14:41:54
    invoke()方法的返回值总是对象, //如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象, //再将其返回 Object result = addMethod.invoke(invokertester, new ...
  • 反射的作用 1)运行时构造类对象; 2)运行时调用对象方法。 3)运行时判断对象所属的类; ...4)运行时判断任意一个类所具有的成员变量和方法;...这个反射中还有两个方法有时候问到: @CallerSensitive ...
  • 对于外部调用的动态库应用反射时要用到Assembly.LoadFile(),然后才是获取类型、执行方法等; 当用反射创建当前程序集中对象实例或执行某个类下静态方法时只需通过Type.GetType("类的完整名")。 using System; using...
  • String name=(String) method2.invoke(obj); System.out.println(name); int age1=(int) method3.invoke(obj); System.out.println(obj); /* Constructor constructor =cls.getConstructor(int.class,String.class)...
  • 所以使用反射方法來獲取invoke接口, 但在實現的過程中出現一些問題, 在這里記錄一下.1.使用反射的方式獲取隱藏的接口if (mMediaPlayer != null) {Parcel request = Parcel.obtain();Parcel repl...
  • JAVA反射机制 invoke()方法的介绍

    千次阅读 2018-05-10 17:50:41
    JAVA反射机制JAVA反射机制是在运行状态,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,209
精华内容 58,883
关键字:

反射中的invoke方法