`
jiasongmao
  • 浏览: 671186 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

如何通过JAVA中的反射加载某个类中的某个方法

阅读更多
主类:LoadMethod类
---------------------------------------------------------------------------------
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class LoadMethod {
/**
* 加载某指定类的指定方法
* @param cName
* @param MethodName
* @param type
* @param param
* @return Object
* @author 贾松帽
*/
@SuppressWarnings("unchecked")
public Object Load(String cName, String MethodName, String[] type,String[] param) {
Object retobj = null;
try {
// 加载指定的Java类
Class cls = Class.forName(cName);

// 获取指定对象的实例
Constructor ct = cls.getConstructor(null);
Object obj = ct.newInstance(null);

// 构建方法参数的数据类型
Class partypes[] = this.getMethodClass(type);

// 在指定类中获取指定的方法
Method meth = cls.getMethod(MethodName, partypes);

// 构建方法的参数值
Object arglist[] = this.getMethodObject(type, param);

// 调用指定的方法并获取返回值为Object类型
retobj = meth.invoke(obj, arglist);

} catch (Throwable e) {
System.err.println(e);
}
return retobj;
}

// 获取参数类型 Class[]的方法
@SuppressWarnings("unchecked")
public Class[] getMethodClass(String[] type) {
Class[] cs = new Class[type.length];
for (int i = 0; i < cs.length; i++) {
if (!type[i].trim().equals("") || type[i] != null) {
if (type[i].equals("int") || type[i].equals("Integer")) {
cs[i] = Integer.TYPE;
} else if (type[i].equals("float") || type[i].equals("Float")) {
cs[i] = Float.TYPE;
} else if (type[i].equals("double") || type[i].equals("Double")) {
cs[i] = Double.TYPE;
} else if (type[i].equals("boolean")
|| type[i].equals("Boolean")) {
cs[i] = Boolean.TYPE;
} else {
cs[i] = String.class;
}
}
}
return cs;
}

// 获取参数 Object[]的方法
public Object[] getMethodObject(String[] type, String[] param) {
Object[] obj = new Object[param.length];
for (int i = 0; i < obj.length; i++) {
if (!param[i].trim().equals("") || param[i] != null) {
if (type[i].equals("int") || type[i].equals("Integer")) {
obj[i] = new Integer(param[i]);
} else if (type[i].equals("float") || type[i].equals("Float")) {
obj[i] = new Float(param[i]);
} else if (type[i].equals("double") || type[i].equals("Double")) {
obj[i] = new Double(param[i]);
} else if (type[i].equals("boolean")
|| type[i].equals("Boolean")) {
obj[i] = new Boolean(param[i]);
} else {
obj[i] = param[i];
}
}
}
return obj;
}
}

如何使用该类:
LoadMethod loadMethod=new LoadMethod();
loadMethod.Load(className, methodName, new String[]{"String"},new String[]{value});

其中参数className为你要调用的类名,methodName为要调用的类的方法。
其中Load方法返回一个Object对象。可用通过强制转换为你想要的类型。当然转换要合法哈。
分享到:
评论

相关推荐

    JAVA反射机制的入门代码

    总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...

    通过java的反射技术获取,某个包路径下的类,并以表格形式打印类的属性注解注释及属性名称等

    Java反射技术是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个技术主要基于Java.lang.reflect包中的类和接口,如Class、Constructor、Method和Field等。...

    java 反射得到某个方法

    在标题“java 反射得到某个方法”中,我们将探讨如何使用Java反射API来获取并执行类中的特定方法。 首先,我们需要导入Java反射相关的类,主要来自`java.lang.reflect`包,包括`Class`、`Method`和`Invocation...

    java中反射知识总结

    2. **类对象** - 在Java中,每个类都有一个对应的Class对象,它是Java反射的入口。我们可以通过Class对象来实例化对象、获取类的构造器、方法和字段信息。例如,`Class&lt;?&gt; clazz = Class.forName("全限定类名");` 这...

    JAVA反射机制详解视频

    (类的加载概述和加载时机) (类加载器的概述和分类) (获取class文件对象的三种方式) ...(通过反射写一个通用的设置某个对象的某个属性为指定的值) (通过用户的增删改查和学生的登录注册引出中介) (动态代理的概述和实现)

    java类加载机制

    2. **反射调用**:使用 `java.lang.reflect` 包的方法对类进行反射调用时,例如使用 `Class.forName()` 方法。 3. **父类初始化**:当初始化一个类时,如果其父类尚未初始化,则需要先初始化父类。 4. **虚拟机启动...

    java习题-反射-chap15.pdf

    Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象...说明下面几种情况,应该采用哪种获得类对象的方法1)获得String 类的类对象2)加载一个类,该类的全限定名写在某个配置文件中3)打印某个对象的所有方法

    java反射机制学习(四):通过反射执行方法、操作属性、操作数组中的数据

    Java反射机制是Java编程语言中一个强大的特性,它允许运行时动态地获取类的信息并进行操作,如创建对象、调用方法、访问属性以及处理数组等。在本篇讲解中,我们将深入理解如何通过反射来执行方法、操作属性以及处理...

    Javafanshe.rar_java 反射_java反射_反射_反射机制

    Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象的内部信息,即使这些信息在编译时并不知道。这一机制使得Java具有了高度的动态性,能够实现元编程,即在程序...

    java反射源代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...

    Java中的反射实现数据库操作

    在Java编程语言中,反射是一种强大的机制,它允许我们在运行时检查类、接口、字段和方法的信息,并且能够在不知道对象具体类型的情况下调用其方法或访问其属性。反射是Java提供的一种动态类型功能,这对于创建灵活、...

    Java虚拟机JVM类加载初始化

    Java虚拟机JVM类加载初始化是Java程序运行过程中的关键环节,它负责将类的字节码文件加载到内存中并进行相应的处理,以便程序能够正确执行。在Java中,类加载器(Classloader)扮演着核心角色。下面将详细讨论类加载...

    java反射机制应用

    通过`Class.forName()`方法可以加载指定类,然后通过`isInstance()`方法判断一个对象是否是该类或其子类的实例。 ##### 2. 创建一个类的新实例 ```java Class&lt;?&gt; cls = Class.forName("com.example.Jdk"); Jdk ...

    java反射经典实例

    通过上述实例,我们可以看到Java反射机制在许多实际场景中的应用,它扩展了Java代码的灵活性和可扩展性。然而,也应注意,过度使用反射可能会引入复杂性和潜在的安全风险,因此在设计和实现时需权衡利弊。在理解了...

    JAVA2 反射技术 pdf

    有时候我们需要动态获取类中某个特定的方法并了解其签名(参数列表、异常和返回类型等): ```java import java.lang.reflect.Method; public class MethodDemo { private int f1(Object p, int x) throws ...

    JAVA中的反射机制

    1. 类(Class):在Java中,每个对象都是某个类的实例。类是对象的模板,定义了对象的属性和行为。当我们编写Java程序并编译后,每个类都会被转换为一个.class文件。 2. 对象(Object):类的实例称为对象,对象是...

    一个例子让你了解Java反射机制

    当程序首次引用某个类时,JVM会通过ClassLoader找到对应的.class文件并加载到内存中。 - Class对象代表运行时的类信息,可以通过`Class.forName()`方法或对象的`getClass()`方法获取。 2. **获取类信息** - `...

    JAVA反射详解

    Java反射是Java编程语言的一个强大特性,允许程序在运行时检查和操作类、接口、字段和方法等。本文章旨在深入解析Java反射机制,包括其原理、应用以及常见用法。 #### 了解Class对象 在Java中,`Class`对象是一个...

Global site tag (gtag.js) - Google Analytics