`

反射应用

    博客分类:
  • 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). 从这里可以看到代码的详细解说:...

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

    这个"c# 反射应用几乎最全面的实例"集合可能是为了展示反射的各种应用场景和用法。以下是对C#反射及其应用的详细解释。 反射的概念: 反射是.NET框架提供的一种能力,它允许代码在运行时分析自身,获取类型信息,...

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

    "XML解析与反射应用联合"的主题,意味着这个压缩包可能包含了一个示例项目,展示了如何结合XML解析和反射来实现灵活的配置和动态行为。例如,可能有一个XML配置文件定义了某些类的实例化和它们应执行的方法,然后...

    java反射应用实例

    在标题“Java反射应用实例”中,我们关注的是如何在实际项目中利用反射来实现特定的功能。这篇博客文章(可以通过链接访问)可能会探讨以下几个方面: 1. **什么是反射**:首先,我们需要理解反射的基本概念。反射...

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

    总结来说,这个八年级物理光反射应用PPT学习教案涵盖了光的反射定律、反射角和入射角的概念、光反射作图方法、平面镜的应用(包括改变光路、潜望镜原理)、以及平面镜成像的原理和作图技巧。这些知识是光学基础的...

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

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

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

    下面我们将详细探讨C#反射的基础知识,以及如何进行封装和应用。 1. **反射基础**: - 类型信息:通过`typeof`关键字或`Type`类的静态方法`GetType`可以获取到类型信息,如类名、接口、基类、属性、方法等。 - ...

    反射Reflection小应用

    在提供的"Test"压缩包文件中,可能包含了一个简单的反射应用示例,例如创建一个类,然后通过反射调用其方法或访问其字段。学习这个小例子可以帮助初学者更好地理解反射的实际运用。然而,反射虽然强大,但应谨慎使用...

    java反射应用详细介绍.rar

    在深入理解Java反射的应用之前,我们首先需要知道什么是反射以及它的基本概念。 Java反射机制的核心在于`java.lang.Class`类,每个类在内存中都有一个对应的Class对象,它包含了该类的所有信息。通过`Class.forName...

    Java反射简单应用

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

    Java反射技术的一般应用

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

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

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

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

    在编程领域,反射机制是一种强大的特性,允许程序在运行时检查自身的行为,包括类的信息、对象的状态以及函数的调用等。在C++的世界里,Qt框架提供了一种实现反射的手段,即QMetaObject系统。这个系统允许我们动态地...

    Unity实现镜面反射

    为了将镜面反射应用到游戏对象,你需要将带有自定义Shader的材质赋给物体。在描述中提到的"将脚本放在需要镜面的面板上",可能指的是使用一个脚本来控制面板(Plane或UI Element)的行为,例如调整其大小、位置或...

    C#反射应用实例

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

    java反射应用详细介绍

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

    八年级物理上册第3章光和眼睛第2节探究光的反射规律第2课时光的反射分类应用学案无答案粤教沪版.doc

    【光的反射应用】 1. 日常生活中,比如电影院的屏幕,其表面处理就是利用漫反射,使得坐在不同位置的观众都能清楚看到屏幕上的图像。 2. 另一个例子是汽车的后视镜,它利用镜面反射原理,使驾驶员能看到车后的情况...

    .net 反射应用

    在B/S架构中,比如Web应用,反射的应用场景可能更广泛。它可以用于动态加载Web服务、控制器或者处理程序类,这样可以根据配置文件的变化灵活调整应用的行为。例如,假设配置文件定义了处理HTTP请求的特定Controller...

    轻松学会c# 反射浅析原理及应用教程

    下面是一个简单的C#反射应用示例,通过反射调用类库中的不同方法: ```csharp using System; using System.Reflection; namespace ReflectionTest { public class WriteTest { // 带参数的公共方法 public ...

    java反射应用

    这篇博文主要探讨了如何在实际开发中应用Java反射,以增强代码的灵活性和动态性。 一、Java反射的基础概念 1. 类加载器(ClassLoader):负责将.class文件加载到JVM中,转换为Class对象。 2. Class对象:代表运行时...

Global site tag (gtag.js) - Google Analytics