当前位置:首页 > 开发 > 移动开发 > 正文

一些反射调用的方法

发表于: 2015-06-18   作者:dandy_deng   来源:转载   浏览次数:
摘要: /** * 反射调用某方法得到所需要的值(Object需要强制转型)get the returned object by reflection without parameters * <p> * 需要注意的是这种方法是无参构造器,并且调用的是无参方法 * * @param className *
/**
     * 反射调用某方法得到所需要的值(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;
    }

 

 

一些反射调用的方法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
整体通信过程如下图: package search; import java.io.InputStream; import java.io.ObjectInputSt
Reflection(反射)是深入学习.Net必须掌握的技能之一。最初学Reflection的时候,的确是被惊住了,原
  今天突然想把某一功能封装成服务器控件,但这一功能又需要连接数据库,如果直接在控件里连接数
原文:http://www.cnblogs.com/tianzhiliang/archive/2012/06/29/2570275.html 下面通过编写Demo的
动态加载程序集 在我尝试搭建一个高度抽象的企业级三层架构时,我运用了反射的原理来解除框架间层次
第一次发帖 什么是Activity? 俗通一点说Activity就是一个界面,这个界面里头可以放置各种件控。Acti
自定义注解及其应用 定义一个简单的注解: public @interface MyAnnotation{} package com.itcast.da
下面通过编写Demo的方式,验证各种反射的性能。 1、传统方式反射 1 Type t = typeof(Person); 2 Met
这里我要实现类似AjaxPro组件调用效果的功能,先看看AjaxPro在CS文件中的代码是怎么写的。 //在后台
我们继续C#基础知识的学习,这篇文章主要要讲的是我们C#程序员迈向高级C#程序员的关键性的一步。 有
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号