知道类名,方法名,和参数这三个字符串,怎么调用函数

  现有三个字符串,一个是类名,一个是方法名,一个是方法的参数,三个都是字符串。现需要调用该方法,具体操作如下。

  1)、先获得该类。

    Class cname=null;
    try {
        cname = Class.forName (classname);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }    

  Class.forName (classname);该方法的作用是通过反射获取这个类对象,关于反射请参考http://www.cnblogs.com/xiufengd/p/4723426.html,或自己百度。

  2)、获取方法

Method[] methodes = cname.getDeclaredMethods();
for (int i = 0; i < methodes.length; i++)
{
    method = methodes[i];
    if (method.getName().equals(methodName))
    {
          //其他操作
    }
}

  反射后获得的类对象有一个方法:getDeclaredMethods(),该方法的作用是获得类或接口声明的所有方法。然后循环遍历获得的方法数据,通过getName方法判断与要求方法相同的方法,然后获得这个Method对象。

  3)、调用方法

Object result=null;
if(arg.equals("")){
    result = method.invoke(cname,null);
}else if(arg.split(",").length==1){
    result = method.invoke(cname, arg);
}

  Method对象有一个方法为invoke方法,该方法有两个参数,第一个表示类名,第二个表示参数,该方法的作用就是调用cname这个类的method方法,方法的参数为arg。

目前存在的问题:

  因为arg这个参数是一个字符串,所以所有的操作只能在具体方法中再进行分割成参数数组,然后调用多个参数。

时间: 2024-08-06 22:05:44

知道类名,方法名,和参数这三个字符串,怎么调用函数的相关文章

C#基础-获得当前程序的 空间名.类名.方法名

string typeName = this.GetType().ToString();//空间名.类名 string typeName = this.GetType().Name;//类名 new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name 方法名 C#基础-获得当前程序的 空间名.类名.方法名

菠菜网站函数参数传入和菠菜平台重复调用函数的搭建使用方法

原创摘要:菠菜网站函数参数传入和菠菜平台重复调用函数的搭建使用详细方法菠菜网站函数参数BCfrom sys import argv#利用sys.argv传入参数,argv是一个BC网参数列表listscript,file_name,input_encoding,errors = argv def main(language_file,encoding,errors):#主函数参数print(">>>>main",repr(language_file),encod

c# 获取方法所在的命名空间 类名 方法名

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Reflection; namespace GetMethodNameSpace { class Program { public static string GetMethodInfo() { string str = ""; //取得当

C 可变长参数运用-----编写Lua的通用调用函数

1.C可变长参数 printf这个使用频繁的C语言函数的参数列表包含一个const char*的描述串,还有一个可变长参数(...) ,如下为printf的函数声明. int printf(const char * __restrict, ...) 在stdarg.h这个头文件中包含着对可变长参数进行操作的一些宏(x86平台为例): #define va_start(ap,v)( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) ( 

js拼装字符串中调用函数传递多个参数。

var txt = '<button href="javascript:void(0);" onclick="editItemXmys(\''+row.XMYS_ID+"','"+row.ITEM_NO+'\')" class="iput_m" style="width: 40px; height: 20px;">' + '修改' + '</button>'; 原文地址:https:

.NET 中获取调用方法名

在写记录日志功能时,需要记录日志调用方所在的模块名.命名空间名.类名以及方法名,想到使用的是反射(涉及到反射请注意性能),但具体是哪一块儿还不了解,于是搜索,整理如下: 需要添加相应的命名空间: using System; using System.Diagnostics; using System.Reflection; 如果仅是获取当前方法名,可以使用如下代码: public static void WriteSysLog(int level, string content) { Metho

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

根据类名,方法名,反射调用类的方法

/** * 根据类名,方法名,反射调用类的方法 * @方法名称: getResult * @描述: TODO * @param className * @param methodName * @param params * @return */ public static String getResult(String className,String methodName,Map<String,Object> params){ String result = null; try{ Objec

获取java中当前运行代码类名,行号,方法名

最近项目在线上出现一个报加密控件输入为空的bug,由于IOS,Android,web端都报,但是没找到原因,因为是偶现,所以为了捕捉这个问题,做出要我们把报错信息传给后台,所以就写一下获取的方法.1.获取方法名:public static String getCurrentMethodName() { int level = 1; StackTraceElement[] stacks = new Throwable().getStackTrace(); String methodName = s