精华内容
下载资源
问答
  • java中的反射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方法的使用

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

    invoke 主要是用来调用某个类中的方法的,但是他不是通过当前类直接去调用而是通过反射的机制去调用。

    在这之前我们先新建一个实体类,一会会用到。

    public class TestMode {
        private static final String TAG = "TestMode";
    
        private int age;
    
        String name;
    
    
        int length;
        public TestMode() {
        }
    
        public TestMode(int age, String name, int length) {
            this.age = age;
            this.name = name;
            this.length = length;
        }
    
        public int getLength() {
            return length;
        }
    
        public void setLength(int length) {
            this.length = length;
        }
    
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        private void testReflect(String msg) {
            System.out.println(msg);
        }
    
        @Override
        public String toString() {
            return "TestMode{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    ", length=" + length +
                    '}';
        }
    }
    

     

    然后我们上个测试类:

    public class ReflectTest {
        public static void main(String args[]) {
            TestMode testMode = new TestMode(30, "明", 170);
            //获取class 对象
            Class cla = testMode.getClass();
            //获取去类中的所有方法,返回一个method数组
            Method[] methods = cla.getDeclaredMethods();
            for (Method method : methods) {
                method.setAccessible(true);
                //获取当前方法的修饰符参数
                int modifiers = method.getModifiers();
                //获取该方法的参数
                Class<?>[] types= method.getParameterTypes();
               //只调用私有方法,并且参数必须是一个
                if (modifiers == Modifier.PRIVATE && types.length==1) {
                    try {
    
                        method.invoke(testMode, "我要开始调用方法了" + method.getName());
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    }
                }
    
            }
    
        }
    }

    执行结果:

    我要开始调用方法了testReflect
    
    1. getDeclaredMethods()  是Class 类的方法,它返回了当前类的所有的方法数组 Method[]数组,
    Method是方法相关参数的封装类。

    2. getModifiers() 是method 类中的方法,通过该方法我们可以获取该方法的修饰符 类如 public 等,

    java 中Modifier 类定义了所有的修饰符。

    3. getParameterTypes() 是method 类中的方法,通过该方法能够返回当前方法的所有参数的class[] 数组,并且是顺序的。

    4. invoke(Object obj, Object... args) 是method 类中的方法,这个方法是一个native 方法

      obj: 调用类的实例对象

      args:调用发方法的参数,是可变长度的

    通过 method.invoke(obj , args ) 可以实现method 方法的调用,并通过args 参数传参。

     

     

     

    展开全文
  • 因为这里是一个可变参数。

    在这里插入图片描述
    因为这里是一个可变参数。

    展开全文
  • 作者:码上猿梦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()方法的理解

    展开全文
  • 反射invoke方法

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

    万次阅读 多人点赞 2018-07-29 00:31:48
    然而前段时间研究invoke方法时,发现invoke方法居然包含多态的特性,这是以前没有考虑过的一个问题。那么Method.invoke()方法的执行过程是怎么实现的?它的多态又是如何实现的呢? 本文将从java和JVM...
  • java 反射 invoke()

    千次阅读 2021-06-15 15:52:13
    今天在同事的提醒下,突然发现自己对反射的应用不够到位,看了一下网上大神对源码的讲解,结合自己的问题特此记录一下. 背景 : 通过反射的方式获取枚举类的值 代码如下 public RestResult<List<BaseSysDictVO>...
  • java反射中的invoke方法

    2020-01-07 00:06:04
    2、invoke方法的含义:反射调用实例方法,返回的是实例方法的返回值。 3、哪个方法调用invoke方法,返回的就是哪个方法的返回值。 4、invoke方法的参数含义:第一个参数的含义是:实例对象,第二个方法的含义是:...
  • Java反射invoke()方法

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

    千次阅读 2014-08-28 18:10:20
    java反射invoke()方法   invoke()方法:  主要是为了类反射,可以在不知道具体类的情况下,根据配置字符串去调用一个类的方法。最简单的方法是可以把方法参数化。    main.invoke():  比如Test类里有...
  • import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;... //调用invoke方法来调用 method.invoke(m, (Object) s); } }
  • 主要介绍了Java反射机制及Method.invoke详解,本文讲解了JAVA反射机制、得到某个对象的属性、得到某个类的静态属性、执行某对象的方法、执行某个类的静态方法等内容,需要的朋友可以参考下
  • JAVA反射机制 invoke()方法的介绍

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

    千次阅读 2021-03-05 18:03:44
    以下代码简单地介绍了java反射invoke方法packageorg.curry.tool;importjava.lang.reflect.Method;publicclassInvokeMethods{publicstaticvoidmain(String[]args){Employeeemp=newEmployee(...
  • 即使没有学过反射,大家也一定会见过invoke方法。因为很多方法调用都是靠invoke方法,所以很多异常的抛出都会定位到invoke方法,比如下面的情形大家会很熟悉: 1 2 3 4 5 6 ...
  • Java反射之Method的invoke方法实现

    千次阅读 2020-11-11 21:55:35
    然而前段时间研究invoke方法时,发现invoke方法居然包含多态的特性,这是以前没有考虑过的一个问题。那么Method.invoke()方法的执行过程是怎么实现的?它的多态又是如何实现的呢? 本文将从java和JVM的源码实现深入...
  • 反射的作用 1)运行时构造类对象; 2)运行时调用对象方法。 3)运行时判断对象所属的类; ...4)运行时判断任意一个类所具有的成员变量和方法;...这个反射中还有两个方法有时候问到: @CallerSensitive ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;...namespace B002_使用反射调用方法_MethodInfo.Invoke方法_ { class...
  • 最近工作中涉及到获取同程火车票,大概描述为...给最后一层类赋值是通过属性名反射的,也就是说类变量名不同,变量类型相同,最后只有部分变量名有值,其他都为空。在获取具体某个座席时会用到Java反射,笔者觉得应...
  • } 运行结果: 通过反射调用普通方法 通过class对象获取Method对象 通过Method对象的invoke方法传入使用方法的对象和方法的参数从而调用方法 //通过反射操作对象 public class Test09 { public static void main...
  • 反射invoke方法之我见

    2015-08-02 21:01:47
    反射invoke方法
  • 所以使用反射方法來獲取invoke接口, 但在實現的過程中出現一些問題, 在這里記錄一下.1.使用反射的方式獲取隱藏的接口if (mMediaPlayer != null) {Parcel request = Parcel.obtain();Parcel repl...
  • 反射参数是list的invoke调用 Method m1 = primaryClass.getDeclaredMethod("setFileInfoVoList", java.util.List.class); m1.invoke(record, fileInfoVoList);
  • } } /** * 反射调用方法 * @param newObj 实例化的一个对象 * @param methodName 对象的方法名 * @param args 参数数组 * @return 返回值 * @throws Exception */ public static Object invokeMethod(Object newObj...
  • 二:动态代理中的代理类是通过Proxy.newInstance方法,即反射生成代理类实例的,该代理类中有一个与被代理方法同名的成员方法,而该成员方法的实现实际就是调用了InvocationHandler实现类的invoke方法,即通过代理类...
  • 对于外部调用的动态库应用反射时要用到Assembly.LoadFile(),然后才是获取类型、执行方法等; 当用反射创建当前程序集中对象实例或执行某个类下静态方法时只需通过Type.GetType("类的完整名")。 using System; using...
  • java 反射调用set方法

    千次阅读 2021-02-12 15:29:39
    下面是小编为您带来的java 反射调用set方法,希望对大家有所帮助。java 反射调用set方法:import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class ...
  • java反射invoke方法

    2018-07-22 19:17:00
    public static void invoke(){ //获取class对象 Class clazz = Class.forName("cn.ph.test.UserDao"); //获取对象方法 Method[] mds = clazz.getMethods(); //遍历 f...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,404
精华内容 56,961
关键字:

反射invoke方法