`
fengxu0706
  • 浏览: 15638 次
社区版块
存档分类
最新评论

反射实例

阅读更多
package reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashSet;
import java.util.Set;

public class NewReflectTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		CompanyEmployer companyEmployer = new CompanyEmployer();
		companyEmployer.setAge(new Long(33));
		Set<CompanyEmployer> companyEmployers = new HashSet<CompanyEmployer>();
		companyEmployers.add(companyEmployer);

		Company c = new Company();
		c.setCompanyEmployers(companyEmployers);
		companyEmployer.setCompany(c);

		if (c instanceof CompanyInterface) {
			Employer employer = c.returnClass();
			System.out.println("Employer:" + employer.getAge());
		} else {
			throw new Exception("");
		}

		StringBuffer sb = new StringBuffer();
		String className = "reflection.Company";
		Class<?> cls = Class.forName(className);
		// 包名
		sb.append(cls.getPackage()).append(";").append("\n");
		// 类信息
		sb.append(Modifier.toString(cls.getModifiers())).append(" ")
				.append("Class").append(" ").append(cls.getSimpleName())
				.append(" ").append("{").append("\n").append("\n");
		// 属性信息
		String fieldStr = printField(cls);
		// 构造函数
		String constructorStr = printConstructor(cls);
		// 方法
		String methodStr = printMethod(cls);

		sb.append(fieldStr);
		sb.append(constructorStr);
		sb.append(methodStr);
		System.out.println(sb.toString());

	}

	/**
	 * 属性信息
	 * 
	 * @param cls
	 * @return
	 */
	public static String printField(Class<?> cls) {
		StringBuffer sb = new StringBuffer();
		// 属性信息
		Field[] fields = cls.getDeclaredFields();
		for (Field field : fields) {
			// 域信息
			sb.append(Modifier.toString(field.getModifiers())).append(" ")
					.append(field.getType().getName()).append(" ")
					.append(field.getName()).append(";").append("\n");

		}
		sb.append("\n");
		return sb.toString();
	}

	/**
	 * 反射构造函数
	 * 
	 * @param cls
	 * @return
	 */
	public static String printConstructor(Class<?> cls) {
		StringBuffer sb = new StringBuffer();
		Constructor<?>[] constructors = cls.getConstructors();
		for (Constructor<?> constructor : constructors) {
			sb.append(Modifier.toString(constructor.getModifiers()))
					.append(" ").append(cls.getSimpleName()).append("(");
			Class<?>[] clss = constructor.getParameterTypes();
			if (clss.length > 0) {
				for (int i = 0; i < clss.length; i++) {
					Class<?> paramType = clss[i];
					sb.append(paramType.getSimpleName());
					sb.append(" ");
					sb.append("paramType" + (i + 1));
					sb.append(",");
				}
				sb.deleteCharAt(sb.length() - 1);
			}
			sb.append(")").append("{").append("\n").append("\n");
			sb.append("}").append("\n").append("\n");
		}
		return sb.toString();
	}

	/**
	 * 反射函数
	 * 
	 * @param cls
	 * @return
	 */
	public static String printMethod(Class<?> cls) throws Exception {
		StringBuffer sb = new StringBuffer();
		Method[] methods = cls.getDeclaredMethods();
		for (Method method : methods) {
			// method.setAccessible(true);
			sb.append(Modifier.toString(method.getModifiers()));
			sb.append(" ");
			String returnStr = method.getReturnType().getSimpleName();
			sb.append(returnStr);
			// if("Set".equalsIgnoreCase(returnStr)){
			// //method.invoke(Object, new Object[]());
			// }

			sb.append(" ");
			sb.append(method.getName());
			sb.append("(");
			Class<?>[] clss = method.getParameterTypes();
			if (clss.length > 0) {
				for (int i = 0; i < clss.length; i++) {
					Class<?> paramType = clss[i];
					sb.append(paramType.getSimpleName());
					sb.append(" ");
					sb.append("paramType" + (i + 1));
					sb.append(",");
				}
				sb.deleteCharAt(sb.length() - 1);
			}
			sb.append(")");
			sb.append("{");
			sb.append("\n").append("\n");
			sb.append("}");
			sb.append("\n").append("\n");
			Company company = (Company) cls.newInstance();

			if ("private".equalsIgnoreCase(Modifier.toString(method
					.getModifiers()))) {
				// 启用和禁用访问安全检查的开关,true是不检查,false是检查(默认),不启用安全检查可以提高反射速度
				method.setAccessible(true);
				method.invoke(company, (Object[]) null);

				method.setAccessible(false);
			}
			// method.setAccessible(false);
		}

		return sb.toString();
	}
}
 

 

分享到:
评论

相关推荐

    C#反射实例讲解C#反射实例讲解

    在深入探讨C#反射实例之前,我们首先了解几个关键的概念: - **Assembly(程序集)**:是.NET中的编译单元,包含了一组相关的类型和资源。 - **Type**:表示.NET Framework中的所有类型的抽象基类,包括类、结构、...

    java反射实例代码

    在提供的"java反射实例代码"中,应该包含了如何使用上述方法的实际示例,这些示例有助于加深对Java反射机制的理解。通过阅读和运行这些代码,开发者可以更直观地学习如何在程序运行时动态地操作类、方法和字段,从而...

    C# 反射 实例

    在C#编程中,反射是一种强大的工具,它允许我们在运行时检查、实例化和操作程序集、类型、方法、属性等对象。这个“C# 反射 实例”压缩包很可能是包含了一些示例代码,帮助开发者理解如何在实践中使用反射。让我们...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    c# 反射实例

    //c# 反射实例 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main( string...

    java 反射实例,大量注释,简单易懂

    以下是对"java 反射实例,大量注释,简单易懂"这个主题的详细解释: 1. **反射基础**: - Java反射API主要由`java.lang.reflect`包提供,包括`Class`,`Constructor`,`Method`和`Field`等类。 - `Class`类代表...

    qt反射实例.zip

    在“qt反射实例.zip”这个压缩包中,包含了一个关于Qt反射机制的开发实例。反射是一种编程概念,它允许程序在运行时检查自身结构,如类、对象、方法等,并能够动态地操作这些信息。在C++中,Qt提供了一套完整的反射...

    Java 8个反射实例

    以下将详细介绍Java反射的8个关键实例。 1. 获取Class对象 要使用反射,首先需要获取到目标类的Class对象。这可以通过以下几种方式实现: - 使用`Class.forName()`方法,如`Class&lt;?&gt; clazz = Class.forName("全...

    Java反射实例源码

    标题"Java反射实例源码"表明我们将探讨如何通过源代码来实现和理解Java反射。这个实例可能包含了如何动态地创建对象、调用方法、访问字段和执行构造器的示例。 描述中提到的博客文章"菜鸟学编程(九)——Java反射...

    flash反射实例

    本压缩包文件"flash反射实例"提供了关于AS3.0反射机制的实际应用示例,对于想要深入了解和学习这一技术的开发者来说是一份宝贵的学习资源。 反射机制在AS3.0中的主要功能包括: 1. **类的动态操作**:你可以通过...

    java反射实例.

    在标题和描述中提到的"java反射实例"是一个简单的入门程序,旨在演示如何使用反射来操作JavaBean的get和set方法。 首先,让我们理解JavaBean。JavaBean是一种符合特定规范的Java类,通常具有公有的getter和setter...

    反射实例 帮助你透彻理解反射技术 .net

    反射实例,如标题所示,旨在帮助我们深入理解这一关键概念,并应用它来实现自动升级和插件技术。让我们详细探讨一下这些知识点。 首先,我们要理解什么是反射。在.NET中,反射提供了一种在运行时获取类型信息并使用...

    C# 反射实例

    这个“C# 反射实例”提供了实际操作的例子,展示了如何利用反射来获取类的信息并进行动态操作。 反射的基本概念: 1. **程序集(Assembly)**: C#程序的编译结果,包含一个或多个类型的集合。例如,.dll或.exe文件...

    C#版本的一个封装和反射实例

    在这个"C#版本的封装和反射实例"中,我们将深入探讨两个核心概念:封装和反射。 封装是面向对象编程的基础,它指的是将数据和操作这些数据的方法绑定在一起,形成一个独立的单元,即类。在C#中,我们通过访问修饰符...

    C# 反射实例代码 接口方式动态加载dll方式Reflection

    总结一下,这个C#反射实例代码展示了如何通过接口动态加载和执行DLL中的代码,其核心知识点包括: 1. 接口:定义行为规范,实现多态性。 2. 反射:运行时检查和操作类型,如`Assembly`、`Type`、`Activator`的使用...

    反射实例-JAVA反射机制.pdf

    反射实例-JAVA反射机制

    C# 反射举例 反射实例

    本文将深入探讨C#中的反射,并通过具体的实例来帮助大家更好地理解和掌握这个概念。 首先,我们需要理解什么是反射。反射允许程序在运行时检查自身的行为,即它能获取类型的信息(如类、接口、属性、方法等),并且...

    java反射实例

    在标题“Java反射实例”中,我们聚焦于如何在实际编程中应用这一特性。通过反射,我们可以动态地获取类的信息,如类名、方法名、字段名,甚至可以在运行时创建和调用对象。这对于实现元编程、插件系统、序列化、单元...

    Java反射实例

    以下是对"Java反射实例"的详细解释: 1. **获取Class对象** 要使用反射,首先需要获取到对应的`Class`对象。这可以通过以下三种方式实现: - 使用`Class.forName()`方法,传入类的全名(包括包名)。 - 对象的`...

Global site tag (gtag.js) - Google Analytics