java 反射案例

package com.hcq.main2;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Main {

	public static void main(String[] args) {
		test(Work.class);
	}

	public static void test(Class<?> c) {
		try {
			Object obj = c.newInstance();
			StringBuilder sb = new StringBuilder();
			// 得到类的修饰符
			int mod = c.getModifiers();
			String modName = Modifier.toString(mod);
			// 类的名称
			String simpleName = c.getSimpleName();

			sb.append(modName).append(" ").append("class").append(" ").append(simpleName);

			// 取得父类的Class 继承的类
			Class<?> superclass = c.getSuperclass();
			String simpleName2 = superclass.getSimpleName();
			if ("".equals(simpleName2)) {

			} else {
				sb.append(" ").append("extends").append(" ").append(simpleName2);

			}

			// 获取所有的实现的接口
			Class<?>[] interfaces = c.getInterfaces();
			if (interfaces.length > 0) {
				sb.append(" ").append("implements").append(" ");
				for (Class<?> class1 : interfaces) {
					String simpleName3 = class1.getSimpleName();
					sb.append(simpleName3).append(",");
				}
				sb.delete(sb.length() - 1, sb.length());
			}
			sb.append(" ").append("{").append("\n");

			// 遍历属性
			Field[] declaredFields = c.getDeclaredFields();
			for (Field field : declaredFields) {
				// 打破服装性
				field.setAccessible(true);
				// 属性修饰符
				int modifiers = field.getModifiers();
				String string = Modifier.toString(modifiers);
				// 属性类型
				Class<?> type = field.getType();
				String simpleName3 = type.getSimpleName();
				// 属性名称
				String name = field.getName();
				// 获取属性值
				Object object = field.get(obj);
				if (string.contains("static")) {
					sb.append("\t").append(string).append(" ").append(simpleName3).append(" ").append(name).append("=")
							.append(object).append(";").append("\n");
				} else {

					sb.append("\t").append(string).append(" ").append(simpleName3).append(" ").append(name).append(";")
							.append("\n");

				}
			}
			System.out.println();
			// 得到有参数构造方法
			getHasConstructor(declaredFields, sb, c);
			// 得到无参数构造方法
			getNoConstructor(declaredFields, sb, c);
			// 得到set get方法
			getSetMehod(declaredFields, sb, c);

			// 得到toString方法
			getToString(declaredFields, sb, c);
			sb.append("}");

			System.out.println(sb);
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
	}

	// 得到set get方法
	private static void getSetMehod(Field[] declaredFields, StringBuilder sb, Class<?> c) {
		String simpleName = c.getSimpleName();

		for (Field field : declaredFields) {
			// 属性修饰符
			int modifiers = field.getModifiers();
			String string = Modifier.toString(modifiers);
			// 属性类型
			Class<?> type = field.getType();
			String simpleName3 = type.getSimpleName();
			// 属性名称
			String name = field.getName();
			if (!string.contains("static")) {
				// 首字母大写
				char charAt = name.charAt(0);
				char upperCase = Character.toUpperCase(charAt);
				// 拼接get方法
				sb.append("\t").append("public").append(" ").append(simpleName3).append(" ")
						.append("get" + upperCase + name.substring(1)).append("()").append("{").append("\n");
				sb.append("\t  return ").append(name).append(";\n\t}\n");
				// 拼接set方法
				sb.append("\t").append("public").append(" ").append("void").append(" ")
						.append("set" + upperCase + name.substring(1)).append("(").append(simpleName3).append(" ")
						.append(name).append(")").append("{").append("\n");

				sb.append("\t  this.").append(name).append("=").append(name).append(";\n\t}\n");
			}

		}
	}

	// 得到toString方法
	private static void getToString(Field[] declaredFields, StringBuilder sb, Class<?> c) {
		String simpleName = c.getSimpleName();
		sb.append("\t").append("public").append(" ").append("String toString").append("()").append("{").append("\n");
		sb.append("\t  return \"").append(simpleName).append(" [");
		for (Field field : declaredFields) {
			// 属性修饰符
			int modifiers = field.getModifiers();
			String string = Modifier.toString(modifiers);
			// 属性类型
			Class<?> type = field.getType();
			String simpleName3 = type.getSimpleName();
			// 属性名称
			String name = field.getName();
			if (!string.contains("static")) {
				sb.append(name).append("=\"+ ").append(name).append(" +\"").append(", ");
			}

		}
		sb.delete(sb.length() - 2, sb.length());
		sb.append("]\";").append("\n").append("\t }\n");
	}

	// 得到无参数构造方法
	private static void getNoConstructor(Field[] declaredFields, StringBuilder sb, Class<?> c) {
		String simpleName = c.getSimpleName();
		sb.append("\t").append("public").append(" ").append(simpleName).append("()").append("{").append("\n\n")
				.append("\t }").append("\n");
	}

	// 得到有参数构造方法
	private static void getHasConstructor(Field[] declaredFields, StringBuilder sb, Class<?> c) {
		String simpleName = c.getSimpleName();
		sb.append("\t").append("public").append(" ").append(simpleName).append("(");
		for (Field field : declaredFields) {
			// 属性修饰符
			int modifiers = field.getModifiers();
			String string = Modifier.toString(modifiers);
			// 属性类型
			Class<?> type = field.getType();
			String simpleName3 = type.getSimpleName();
			// 属性名称
			String name = field.getName();
			if (!string.contains("static")) {
				sb.append(simpleName3).append(" ").append(name).append(", ");
			}

		}
		sb.delete(sb.length() - 2, sb.length());
		sb.append(")").append(" ").append("{").append("\n");

		for (Field field : declaredFields) {
			// 属性修饰符
			int modifiers = field.getModifiers();
			String string = Modifier.toString(modifiers);
			// 属性名称
			String name = field.getName();
			if (!string.contains("static")) {
				sb.append("\t   ").append("this.").append(name).append("=").append(name).append(";").append("\n");
			}
		}
		sb.append("\t}").append("\n");
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值