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");
}
}
java 反射案例
最新推荐文章于 2021-02-19 21:47:49 发布