`

一些反射调用的方法

阅读更多
/**
     * 反射调用某方法得到所需要的值(Object需要强制转型)get the returned object by reflection without parameters
     * <p>
     * 需要注意的是这种方法是无参构造器,并且调用的是无参方法
     * 
     * @param className
     *            要调用的类 the class which has a method named the methodName you give
     * @param methodName
     *            要掉用该类里的这个方法 the name of the method
     * @return
     * @throws Exception
     */
    public static Object getMethodReturnObject(String className, String methodName) throws Exception {
        return getMethodReturnObject(className, methodName, null, null);
    }

 

/**
     * 反射调用某静态方法得到所需要的值(Object需要强制转型)get the returned object by reflection without parameters
     * <p>
     * 需要注意的是这种方法是无参构造器,并且调用的是无参方法,静态方法
     * 
     * @param className
     *            要调用的类 the class which has a method named the methodName you give
     * @param methodName
     *            要掉用该类里的这个方法 the name of the method
     * @return
     * @throws Exception
     */
    public static Object getStaticMethodReturnObject(String className, String methodName) {
        return getStaticMethodReturnObject(className, methodName, null, null);
    }

 

public static Object getStaticMethodReturnObject(String className, String methodName, Class<?>[] parameterTypes, Object[] args) {
        try {
            Class<?> clazz = Class.forName(className);
            Method method = clazz.getMethod(methodName, parameterTypes);
            Object object = method.invoke(null, args);
            return object;
        } catch (Exception e) {
            LogHelper.d(TAG, LogHelper.getThreadName() + "Exception=" + e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

 

/**
     * 反射调用某方法得到所需要的值(Object需要强制转型)get the returned object by reflection without parameters
     * <p>
     * 这种方法是可以使用有参的构造器,但是调用的方法是无参的
     * 
     * @param className
     *            要调用的类 the class which has a method named the methodName you give,may be a abstract class like Context
     * @param instance
     *            要调用的类的实例,该实例可以是带有参数的实例,也可以是无参的实例 the instance of the giving className like context
     * @param methodName
     *            要掉用该类里的这个方法 the name of the method
     * @throws Exception
     */
    public static Object getMethodReturnObject(String className, Object instance, String methodName) throws Exception {
        return getMethodReturnObject(className, instance, methodName, null, null);
    }

 

/**
     * 反射调用某方法得到所需要的值(Object需要强制转型),注意这种方式得到的构造器是无参的构造器
     * <p>
     * 如果该类找不到无参的构造器将会抛出异常
     * 
     * @param className
     *            要调用的类
     * @param methodName
     *            要掉用该类里的这个方法
     * @param parameterTypes
     *            方法对应的参数类型
     * @param args
     *            方法的参数实际的值
     * @return
     * @throws Exception
     */
    public static Object getMethodReturnObject(String className, String methodName, Class<?>[] parameterTypes, Object[] args) throws Exception {
        Class<?> classes = Class.forName(className);
        Object instance = classes.newInstance();
        Method method = classes.getMethod(methodName, parameterTypes);
        Object roProductManufacturer = method.invoke(instance, args);
        return roProductManufacturer;
    }

 

/**
     * 反射调用某方法得到所需要的值(Object需要强制转型)
     * <p>
     * 如果该类找不到无参的构造器将会抛出异常
     * 
     * @param className
     *            要调用的类
     * @param instance
     *            要调用的类的实例,该实例可以是带有参数的实例,也可以是无参的实例
     * @param methodName
     *            要掉用该类里的这个方法
     * @param parameterTypes
     *            方法对应的参数类型
     * @param args
     *            方法的参数实际的值
     * @return
     * @throws Exception
     */
    public static Object getMethodReturnObject(String className, Object instance, String methodName, Class<?>[] parameterTypes, Object[] args)
            throws Exception {
        Class<?> classes = Class.forName(className);
        if (instance == null) {
            throw new Exception("-----------反射获取类实例:" + className + "失败,返回");
        }
        Method method = classes.getMethod(methodName, parameterTypes);
        Object roProductManufacturer = method.invoke(instance, args);
        return roProductManufacturer;
    }

 

 

  • 大小: 29.4 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java方法反射调用demo

    `Invoke.java`可能包含反射调用的逻辑,而`Print.java`则可能用来打印或处理反射调用的结果。 总的来说,Java反射提供了强大的能力,让我们可以在运行时动态地操作类和对象。尽管它增加了程序的复杂性,但在某些...

    详解Golang利用反射reflect动态调用方法

    ### Golang 反射 Reflect 动态调用方法详解 #### 一、引言 反射是许多现代编程语言中的一项重要特性,它允许程序在运行时检查和操作自身的内部结构。Go 语言同样具备这样的能力,它通过 `reflect` 包提供了一套...

    Java反射调用方法

    在给定的代码中,`TestRef` 类展示了如何使用Java反射调用方法。首先,我们创建了一个 `Foo` 类,它有一个私有字符串成员变量 `msg` 和三个方法:`setMsg`、`getMsg` 和 `outInfo`。`main` 方法是演示反射调用的入口...

    关于反射调用方法的一个log

    2. `A.java` - 这可能是一个被反射调用的类,它定义了一些方法,供`TestClassLoad.java`在运行时动态调用。这个类的实现和方法签名将直接影响反射调用的过程。 3. `log.txt` - 这个文件包含了程序执行过程中生成的...

    通过反射调用静态方法

    本文将详细讲解如何通过反射调用静态方法,并探讨在特定场景下,如MyBatis中的应用。 首先,理解反射的概念是至关重要的。在Java中,反射API(java.lang.reflect)允许我们获取类的信息,包括类名、构造函数、方法...

    frida反射调用对象中的方法与字段.pdf

    本文主要讲解了在遇到需要操作Java对象的参数或返回值时,如何利用Frida这一动态代码插桩工具来进行反射调用,包括调用对象的方法和获取对象的字段。Frida是一个强大的动态代码插桩工具,它可以注入到几乎所有的进程...

    java 反射 调用私有方法(有参数私有方法)获取私有属性值

    3. **设置访问权限**:由于私有方法默认是不可访问的,所以我们需要通过`setAccessible(true)`方法来改变其访问权限,允许反射调用。`privateMethod.setAccessible(true);` 4. **调用私有方法**:现在我们可以调用...

    反射获取属性调用方法反射获取属性调用方法

    2. 反射调用方法: 反射同样可以用来动态调用类的方法。在Java中,`Method`类提供了这个功能: ```java Method method = clazz.getMethod("yourMethodName", argTypes); method.invoke(yourObject, argValues);...

    Java 反射创建get set方法及反射方法的调用

    本文介绍了如何使用Java反射机制来创建get和set方法,并通过反射调用这些方法来访问对象的属性。这种方式虽然灵活,但在实际开发中应当谨慎使用,因为它可能会降低代码的性能和可维护性。了解反射机制的基本原理对于...

    反射机制例子及反射方法调用

    反射机制例子及反射方法调用 反射机制是一种非常强大的机制,它允许我们在运行时动态地加载和使用类、方法、变量等,这种机制可以使我们的程序更加灵活和可扩展。在Java中,反射机制是通过java.lang.reflect包来...

    反射动态调用DLL方法,含参数

    在给定的场景中,“反射动态调用DLL方法,含参数”意味着我们要通过代码动态地调用DLL库中的特定方法,并且能够传递参数。下面将详细解释这一过程以及涉及的关键知识点。 1. 反射(Reflection): 反射是.NET框架...

    C#实现反射调用动态加载的DLL文件中的方法

    ### C#中使用反射调用动态加载的DLL文件中的方法 #### 反射的作用与应用场景 反射是.NET框架中的一项重要技术,它允许程序在运行时动态地获取自身的元数据(如类、方法、属性等)并进行操作。具体而言,反射主要有...

    android PackageManager 反射调用相关的类android_dependency.jar

    Android PackageManager 有很多方法是没有暴漏出来的,我们如果想调用的话需要用...android_dependency.jar 提供了反射调用相关的class定义,直接放到你的工程libs目录下面,然后就可以进行反射调用PackageManager的API

    反射实例反射调用DLL里的方法

    在实际应用中,反射调用DLL里的方法可能涉及到更复杂的逻辑,比如处理泛型方法、静态方法、私有方法等。同时,需要注意性能问题,因为反射操作相比直接调用通常会慢一些,所以不应在性能敏感的代码中过度使用。 总...

    c#反射调用方法示例

    反射是一种允许用户获得类信息的C#功能,Type对象映射它代表的底层对象; 在.Net 中, 一旦获得了Type对象,就可以使用GetMethods()方法获取此类型支持的方法列表;该方法的两种形式: MethodInfo [] GetMethods() ...

    java 反射得到某个方法

    通过反射,我们可以在不知道具体类名或方法名的情况下,动态地调用对象的方法或访问其属性。在本文中,我们将深入探讨如何使用Java反射来获取并执行某个特定的方法。 首先,我们需要了解Java反射的基本概念。`java....

    反射,动态加载指定类调用类中的方法

    反射机制使得我们能够在运行时动态地获取类的信息,并且能够创建对象、调用方法、访问字段,甚至改变类的行为。在Java中,`java.lang.reflect`包提供了对反射的支持。 在“反射,动态加载指定类调用类中的方法”这...

    反射方法调用model

    反射方法调用model

    C# Lambda反射调用与泛型方法配合

    学习要点: * 1.如何利用Lambda 跟泛型方法配合的区别 .(非委托) * 2.利用Lambda 反射调用属性值 .

    JNI反射调用Java方法1

    在本场景中,我们讨论的是如何通过JNI使用反射调用Java方法。反射在Java中是一个强大的工具,允许程序在运行时动态地访问和修改类、接口、字段和方法。以下是对标题和描述中所述知识点的详细解释: 1. **找类字节码...

Global site tag (gtag.js) - Google Analytics