反射实例

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值