JAVA反射简单实例

来源:互联网 发布:现货软件 编辑:程序博客网 时间:2024/05/22 00:41


package reflect;

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


public class Entity extends EntityFather {

    privateString name;
    privateString age;
    privateString sex;

    publicString getName() {
       return name;
    }

    publicvoid setName(String name) {
       this.name = name;
    }

    publicString getAge() {
       return age;
    }

    publicvoid setAge(String age) {
       this.age = age;
    }

    publicString getSex() {
       return sex;
    }

    publicvoid setSex(String sex) {
       this.sex = sex;
    }

    publicstatic void save_Entity(Object obj) {

       try {
//           Class c1 = obj.getClass();//设置新值
//           Field field = c1.getDeclaredField("name");
//           field.set(obj, "new Young");
           // Class1 cl1 = new Class1();
           // Class cl2 = Class1.class;
           // Class1 cl3 =cl1.getClass();
           // Class cl4=Class.forName(package.class);
           String attr;
           String val;
           int modifer;
           String modiferName;

           Class c = obj.getClass();
           Field[] fs = c.getDeclaredFields();
           for (Field f : fs) {
               modifer = f.getModifiers();
               modiferName = Modifier.toString(modifer);
               attr =f.getName();      //属性名 顺序按照POJO类中的private属性顺序
               val = (String) f.get(obj);//属性值
               System.out.println("Modifier:" + modiferName + "\tAttr:" + attr +"\tVal:" + val);
           }
       } catch (Exception ex) {
           System.out.println(ex.getMessage());
       }
    }

    publicstatic String getStr(String str) {
       System.out.println("调用返回值:" + str);
       return str;
    }
   /////////////////

    publicstatic void main(String[] args) {
       Entity entity = new Entity();
       entity.setName("Young");
       entity.setSex("男");
       entity.setAge("25");

       //new Entity().save_Entity(entity);
       Method[] ms = Entity.class.getDeclaredMethods();
       String methodName;
       int modifier;
       String modifierName;

       for (Method m : ms) {
           methodName = m.getName();
           System.out.println(methodName);
           try {
               if (methodName.startsWith("save")) {
                   m = Entity.class.getDeclaredMethod(methodName, newClass[]{Object.class});//声明方法参数类型
                   m.invoke(entity, entity);

                   modifier = m.getModifiers();
                   modifierName = Modifier.toString(modifier);
                   System.out.println("Method Modifier:" +modifierName);   //方法访问类型
                   System.out.println("Method return type:" +m.getReturnType().getName());//方法返回值类型
                   System.out.print("Params:");
                   for (Class cls : m.getParameterTypes()){      //方法属性值类型
                       System.out.print(cls.getName() + ",");
                   }
                   System.out.println("");
               } else {
//                   m = Entity.class.getMethod("getStr", String.class);
//                   String s=(String)m.invoke(entity, "Invoke Msg");
//                   System.out.println(s);
               }
           } catch (Exception ex) {
               System.out.println(ex.getMessage());
           }
       }
    }
}