java反射取对象中的各表量值

来源:互联网 发布:java log4j 编辑:程序博客网 时间:2024/05/16 09:35
package d;

import java.lang.reflect.Field;
 
 

public class bean01 {

    public static void main(String[] args) {
        bean02 bean = new bean02();bean.setId(222);
        System.out.println(getPojoLog(bean));

    }
    
    //列出一个pojo所有的内容,以便测试时检查数据
    public   static   String   getPojoLog(Object   pojo){
        Class   c   =   pojo.getClass();
        StringBuffer   out   =   new   StringBuffer(c.getName()   + ":   \n ");
        Field[]   fields   =   c.getDeclaredFields();//或者     Field[]   fields   =   c.getFields(); 2者的区别见附录
        Field.setAccessible(fields, true);
        for   (int   i   =   0;   i   <   fields.length;   i++)   {
            Field   field   =   fields[i];
            String   name   =   field.getName();
            if(name.startsWith( "SF_ ")){
                continue;
            }
            try   {
                Object   vo   =   field.get(pojo);
                String   value   =   " ";
                if   (vo   !=   null)   {
                    value   =   field.get(pojo).toString();
                }
                out.append( "         "+   name   + "   =   "   +   value   +   "\n ");

            }   catch   (Exception   e)   {
                e.printStackTrace();
            }
        }
        return   out.toString();
    }
}



package d;
public class bean02{

    public int id;

    public String[] love;

    public String[] getLove() {
        return love;
    }

    public void setLove(String[] love) {
        this.love = love;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}




附录:

  • 1.package study.reflection;     
  • 2.    
  • 3.public class People {     
  • 4.public String name = null;     
  • 5.private String sex = null;     
  • 6.private String age = null;     
  • 7.private String tel = null;     
  • 8.private String address = null;     
  • 9.public static String s = null;     
  • 10.static {     
  • 11.   System.out.println("loading People");     
  • 12.}     
  • 13.    
  • 14.public static void showPeople() {     
  • 15.    
  • 16.}     
  • 17.    
  • 18.public People(String name) {     
  • 19.   this.name = name;     
  • 20.}     
  • 21.    
  • 22.private People() {     
  • 23.   this.name = name;     
  • 24.}     
  • 25.    
  • 26.private void showPeopleInfo() {     
  • 27.   System.out.println(name + " " + sex + " " + age + " " + tel + " "    
  • 28.     + address);     
  • 29.}     
  • 30.    
  • 31.public String getName() {     
  • 32.   return name;     
  • 33.}     
  • 34.    
  • 35.public void setName(String name) {     
  • 36.   this.name = name;     
  • 37.}     
  • 38.    
  • 39.public String getSex() {     
  • 40.   return sex;     
  • 41.}     
  • 42.    
  • 43.public void setSex(String sex) {     
  • 44.   this.sex = sex;     
  • 45.}     
  • 46.    
  • 47.public String getAge() {     
  • 48.   return age;     
  • 49.}     
  • 50.    
  • 51.public void setAge(String age) {     
  • 52.   this.age = age;     
  • 53.}     
  • 54.    
  • 55.public String getTel() {     
  • 56.   return tel;     
  • 57.}     
  • 58.    
  • 59.public void setTel(String tel) {     
  • 60.   this.tel = tel;     
  • 61.}     
  • 62.    
  • 63.public String getAddress() {     
  • 64.   return address;     
  • 65.}     
  • 66.    
  • 67.public void setAddress(String address) {     
  • 68.   this.address = address;     
  • 69.}     
  • 70.    
  • 71.}     
  • 72.    
  • 73.package esg;     
  • 74.    
  • 75.import java.lang.reflect.Constructor;     
  • 76.import java.lang.reflect.Field;     
  • 77.import java.lang.reflect.Method;     
  • 78.    
  • 79.import study.reflection.People;     
  • 80.    
  • 81.public class Esg {     
  • 82.    
  • 83.public static void main(String[] a) throws ClassNotFoundException {     
  • 84.   Class c1 = People.class;     
  • 85.    
  • 86.   Field[] fs = c1.getFields();     
  • 87.   System.out.println("*******getFields()*********");     
  • 88.   for (int i = 0; i < fs.length; i++) {     
  • 89.    System.out.println(fs[i].getName());     
  • 90.   }     
  • 91.   System.out.println("*******getDeclaredFields()*********");     
  • 92.   fs = c1.getDeclaredFields();     
  • 93.   for (int i = 0; i < fs.length; i++) {     
  • 94.    System.out.println(fs[i].getName());     
  • 95.   }     
  • 96.   System.out.println("*******getMethods()*********");     
  • 97.   Method[] md = c1.getMethods();     
  • 98.   for (int i = 0; i < md.length; i++) {     
  • 99.    System.out.println(md[i].getName());     
  • 100.   }     
  • 101.   System.out.println("*******getDeclaredMethods()*********");     
  • 102.   md = c1.getDeclaredMethods();     
  • 103.   for (int i = 0; i < md.length; i++) {     
  • 104.    System.out.println(md[i].getName());     
  • 105.   }     
  • 106.    
  • 107.   System.out.println("*******getConstructors()*********");     
  • 108.   Constructor[] con = c1.getConstructors();     
  • 109.   for (int i = 0; i < con.length; i++) {     
  • 110.    System.out.println(con[i].getName());     
  • 111.   }     
  • 112.   System.out.println("*******getDeclaredConstructors()*********");     
  • 113.   con = c1.getDeclaredConstructors();     
  • 114.   for (int i = 0; i < con.length; i++) {     
  • 115.    System.out.println(con[i].getName());     
  • 116.   }     
  • 117.}     
  • 118.}    


    getFields()与getDeclaredFields()区别:getFields()只能访问类中声明为公有的字段,私有的字段它无法访问.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关 

    getMethods()与getDeclaredMethods()区别:getMethods()只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法 

    getConstructors()与getDeclaredConstructors()区别:getConstructors()只能访问类中声明为public的构造函数.getDeclaredConstructors()能访问类中所有的构造函数,与public,private,protect无关 



  • 原创粉丝点击