反射工具
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import com.test.fanshe.TestFanShe;
/**
* java.lang.reflect
* 反射测试
* @author 房金玮
*
*/
public class ReflectUtil {
public static void main(String[] args) {
// TODO Auto-generated method stub
String className="com.test.fanshe.TestFanShe";
//参数必须是对象类型 不支持数组 将对象序列化到数据库中
// classInstanceForMethodByParameter(className,"testPringMap",map);
// classInstanceForMethodByParameter(className,"testPrintString","房子");
//测试方法重载
classInstanceForMethodByParameter(className,"testPrintString",new Object[]{1,""});
}
public static void classInstanceForMethodByParameter(String className,String methodStr,Object[] parameter){
try {
Class calss=Class.forName(className);
Method[] methods=calss.getMethods();
Class[] parameterTypes=null;
for(Method method:methods){
if(method.getName().equals(methodStr)){
Class[] parameterTypesNow=method.getParameterTypes();
if(parameterTypesNow.length==parameter.length){
boolean flg=true;
for(int i=0;i<parameter.length;i++){
if(!parameterTypesNow[i].equals(parameter[i].getClass())){
flg=false;
break;
}
}
if(flg){
parameterTypes=parameterTypesNow;
}
}
}
if(parameterTypes!=null){
break;
}
}
try {
//执行有参数的构造方法
Method method = calss.getMethod(methodStr, parameterTypes);
method.invoke(calss.newInstance(), parameter);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
// try {
// //执行无参数方法
// Method method = calss.getMethod(methodStr, new Class[]{});
// method.invoke(calss.newInstance(), new Object[]{});
// } catch (Exception e) {
// // TODO: handle exception
// e.printStackTrace();
// }
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试类
package com.test.fanshe;
import java.util.Iterator;
import java.util.Map;
public class TestFanShe {
public String namepublic;
public String getNamepublic() {
return namepublic;
}
public void setNamepublic(String namepublic) {
this.namepublic = namepublic;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void testPrintString(){
System.out.println("testPrintString:");
}
public void testPrintString(String name){
System.out.println("testPrintString:name");
}
public void testPrintString(String name,Integer intstr){
System.out.println("testPrintString:String name,Integer intstr");
}
public void testPrintString(Integer intstr,String name){
System.out.println("testPrintString:Integer intstr,String name");
}
public void testPringMap(Map map){
Iterator<String> iterator=null;
for(iterator=map.keySet().iterator();iterator.hasNext();){
System.out.println(map.get(iterator.next()));
}
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.getClass().getName()+"@"+"namepublic:"+this.namepublic+"&name:"+this.name;
}
}
分享到:
相关推荐
代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...
golang 自动注入工具与反射应用
java反射应用详细介绍.rar
八年级物理光反射应用PPT学习教案.pptx
C#反射其它DLL的封装应用,支持方法、参数、对象的调用。
XML解析与反射机制的初步应用,里面包含了XML解析工具的使用,以及反射机制执行XML文档所描述的未来定义类的方法调用!
这个文档讲述了反射的原理,以及class的各方面的应用举一反三,全面深入的讲述了反射的机制以及巧妙应用
是一个 关于c#反射的几乎最好最全面的例子。
几个小demo,介绍了反射的几个api操作,最后写了一个简单的Java反射应用:工厂+反射+配置文件。
.net 反射应用,根据config配置信息 来动态读取相应类,共包含两个小项目一个c/s模式; 一个b/s模式
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
我国南方页岩层赋存区多以碳酸盐岩覆盖的山地地形为主,目的层埋深跨度大,采用常规地震进行页岩气勘探一般很难取得好的效果。通过广角地震原理分析,并重点介绍了在实际工程中广角地震数据采集和资料处理与常规地震的...
NULL 博文链接:https://dragonmandance.iteye.com/blog/2336911
Qt 使用QMetaObject实现反射机制代码demo
本文实例讲述了C#反射应用。分享给大家供大家参考。具体如下: 通过反射实现多系统数据库的配置 通过定义接口,反射实例化配置的节点的值 配置App.config: 代码如下:<?xml version=”1.0″ encoding=”utf-8″ ...
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。 下面开始正文。 【案例1】通过一个对象...
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
主要介绍了php反射应用示例,需要的朋友可以参考下,代码很简单,直接看下面的代码吧
C# 反射技术应用 反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个...