java 反射案例

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 14:08   11   0
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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP