`

反射应用

    博客分类:
  • java
阅读更多

反射工具

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;
	}
	
}

 

分享到:
评论
1 楼 ruanjiangjx 2010-12-15  
重新修改了方法,支持  方法重载功能!

相关推荐

    Java反射应用实例

    代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...

    golang 自动注入工具与反射应用

    golang 自动注入工具与反射应用

    java反射应用详细介绍.rar

    java反射应用详细介绍.rar

    八年级物理光反射应用PPT学习教案.pptx

    八年级物理光反射应用PPT学习教案.pptx

    Sev.Reflection.rar_C# 反射 封装_反射_反射应用封装

    C#反射其它DLL的封装应用,支持方法、参数、对象的调用。

    XML解析与反射应用联合.zip

    XML解析与反射机制的初步应用,里面包含了XML解析工具的使用,以及反射机制执行XML文档所描述的未来定义类的方法调用!

    java反射应用的原理以及应用

    这个文档讲述了反射的原理,以及class的各方面的应用举一反三,全面深入的讲述了反射的机制以及巧妙应用

    c# 反射应用几乎最全面的实例

    是一个 关于c#反射的几乎最好最全面的例子。

    Java反射简单应用

    几个小demo,介绍了反射的几个api操作,最后写了一个简单的Java反射应用:工厂+反射+配置文件。

    .net 反射应用

    .net 反射应用,根据config配置信息 来动态读取相应类,共包含两个小项目一个c/s模式; 一个b/s模式

    Java反射技术的一般应用

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    页岩气地震勘探中广角反射应用效果分析

    我国南方页岩层赋存区多以碳酸盐岩覆盖的山地地形为主,目的层埋深跨度大,采用常规地震进行页岩气勘探一般很难取得好的效果。通过广角地震原理分析,并重点介绍了在实际工程中广角地震数据采集和资料处理与常规地震的...

    java反射应用实例

    NULL 博文链接:https://dragonmandance.iteye.com/blog/2336911

    Qt 使用QMetaObject实现反射机制代码demo

    Qt 使用QMetaObject实现反射机制代码demo

    C#反射应用实例

    本文实例讲述了C#反射应用。分享给大家供大家参考。具体如下: 通过反射实现多系统数据库的配置 通过定义接口,反射实例化配置的节点的值 配置App.config: 代码如下:&lt;?xml version=”1.0″ encoding=”utf-8″ ...

    java反射应用详细介绍

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。 下面开始正文。 【案例1】通过一个对象...

    JAVA 反射机制应用

    JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用

    php反射应用示例

    主要介绍了php反射应用示例,需要的朋友可以参考下,代码很简单,直接看下面的代码吧

    C# 反射技术应用

    C# 反射技术应用  反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个...

Global site tag (gtag.js) - Google Analytics