最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java通過反射機(jī)制將對象封裝成JSON和JsonArray格式

 更新時間:2023年10月18日 09:42:49   作者:喜上編程  
這篇文章主要介紹了Java通過反射機(jī)制將對象封裝成JSON和JsonArray格式,JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個實(shí)體類,都能夠知道這個類的所有屬性和方法,需要的朋友可以參考下

反射機(jī)制

JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個實(shí)體類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意方法和屬性;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為java語言的反射機(jī)制

Class 沒有公共構(gòu)造方法。Class 對象是在加載類時由 Java 虛擬機(jī)以及通過調(diào)用類加載器中的 defineClass 方法自動構(gòu)造的。

1.獲取構(gòu)造方法,方法,屬性

(1)getConstructors() 獲取公共的構(gòu)造方法

(2)getDeclaredConstructors() 獲取所有的構(gòu)造方法

(3)getMethods() 公共的方法(包含父類Object)

(4)getDeclaredMethods() 所有方法(不包含父類)

(5)getFields() 公共的屬性 (6)getDeclaredFields() 所有的屬性

2.Users對象

package com.it.bean;
public class Users {
    private int age;
    public String name;
    char sex;
    public Users() {
    }
    public Users(String name, char sex) {
        this.name = name;
        this.sex = sex;
    }
    public Users(int age, String name, char sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }
    Users(int age, String name) {
        this.age = age;
        this.name = name;
    }
    private Users(String name,int age){
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public char getSex() {
        return sex;
    }
    public void setSex(char sex) {
        this.sex = sex;
    }
    public void fun1(){
        System.out.println("fun1---");
    }
    public void fun2(String x,String y){
    }
    void fun3(int age){
    }
    private int fun4(){
        return 0;
    }
    protected  void fun5(){
    }
}

3.獲取構(gòu)造方法,方法,屬性

package com.it.reflect;
import com.it.bean.Users;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class Demo2 {
    @Test
    //獲取構(gòu)造方法
    public void fun1(){
        Users users = new Users();
        //獲取該對象所屬類
        Class usersClass =  users.getClass();
        Constructor 	constructor[]=usersClass.getDeclaredConstructors();
        //訪問修飾符     方法名(參數(shù)類型  參數(shù)名)
        for (int i = 0; i < constructor.length; i++) {
            //獲取訪問修飾符
            if(constructor[i].getModifiers()==1){
                System.out.print("public  ");
            }else if(constructor[i].getModifiers()==4){
                System.out.print("protected  ");
            }else if(constructor[i].getModifiers()==2){
                System.out.print("private  ");
            }
            //獲取方法名
            System.out.print(constructor[i].getName()+"(");
            //獲取參數(shù)類型  數(shù)組
            Class parType[]=constructor[i].getParameterTypes();
            for (int j = 0; j <parType.length ; j++) {
                if(j!=parType.length-1){
                    System.out.print(parType[j].getTypeName()+",");
                }else{
                    System.out.print(parType[j].getTypeName());
                }
            }
            System.out.println(")");
        }
    }
    //獲取方法
    @Test
    public void fun2(){
        Users users = new Users();
        Class usersClass =   users.getClass();
        Method method[]=usersClass.getMethods();
        for (int i = 0; i <method.length ; i++) {
            //獲取訪問修飾符
            if(method[i].getModifiers()==1){
                System.out.print("public  ");
            }else if(method[i].getModifiers()==4){
                System.out.print("protected  ");
            }else if(method[i].getModifiers()==2){
                System.out.print("private  ");
            }
            //獲取返回值類型
            Class returnType=method[i].getReturnType();
            //拼接返回值類型和方法名
            System.out.print(returnType.getName()+"  "+method[i].getName()+"(");
            //形參類型
            Class parType[]=method[i].getParameterTypes();
            for (int j = 0; j <parType.length ; j++) {
                if(j!=parType.length-1){
                    System.out.print(parType[j].getTypeName()+",");
                }else{
                    System.out.print(parType[j].getTypeName());
                }
            }
            System.out.println(")");
        }

    }

    //獲取屬性
    @Test
    public void fun3(){
        Users users=new Users();
        Class userClass=users.getClass();

        Field field[]=userClass.getDeclaredFields();
        for (int i = 0; i <field.length ; i++) {
            //獲取訪問修飾符
            if(field[i].getModifiers()==1){
                System.out.print("public  ");
            }else if(field[i].getModifiers()==4){
                System.out.print("protected  ");
            }else if(field[i].getModifiers()==2){
                System.out.print("private  ");
            }
            //獲取數(shù)據(jù)類型  和屬性名
            System.out.println(field[i].getType().getTypeName()+"  "+field[i].getName()+";");
        }
    }
}

Object invoke(Object obj, Object… args) 對帶有指定參數(shù)的指定對象調(diào)用由此 Method 對象表示的底層方法。

區(qū)別如下: 如果 method.invoke(Object obj, Object… args) 第一個參數(shù)傳入的是類的實(shí)例,那么可以反射調(diào)用類的所有方法 包括靜態(tài)方法,前提是 method 是正常獲取 如果 method.invoke(Object obj, Object… args) 第一個參數(shù)傳入的是類的Class對象,那么只能反射調(diào)用類的靜態(tài)方法,否則會報(bào)錯。

一句話概括: 傳入類Class對象只能調(diào)用靜態(tài)方法,傳類的實(shí)例可以調(diào)用所有方法

4.通過反射機(jī)制將對象封裝為json格式

 //封裝方法
    //通過反射機(jī)制將對象封裝成JSON格式
    //{'id':'001','name':'hhh','age':'12'}
    public static String objToJson(Object object) {
        Class cls = object.getClass();
        Method method[] = cls.getMethods();
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("{");
        //從方法中截取屬性名
        //控制,
        int j = 0;
        for (int i = 0; i < method.length; i++) {
            //獲取屬性名  
            if (method[i].getName().startsWith("get") && method[i].getModifiers() == 1) {
                if (j != 0) {
                    stringBuilder.append(",");
                }
                //獲得名字截取  getName()轉(zhuǎn)小寫
                String fieldName = method[i].getName().substring(3).toLowerCase();
//                System.out.println("field->" + fieldName);
                stringBuilder.append("'" + fieldName + "'" + ":");
                //獲取值
                try {
                    stringBuilder.append("'" + method[i].invoke(object) + "'");

                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
                j++;
            }

        }
        stringBuilder.append("}");
       // System.out.println(stringBuilder.toString());
        return stringBuilder.toString();
    }

5.通過反射機(jī)制將對象封裝為jsonArray格式

//通過反射機(jī)制將對象封裝成JSONArray格式
    //[{},{},{},{}]
    public static String objToJsonArray(List<Object> objectList) {
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append("[");

        for (int i = 0; i <objectList.size() ; i++) {
            if(i!=0){
                stringBuilder.append(",");
            }
            //調(diào)用封裝好的json格式
            stringBuilder.append(objToJson(objectList.get(i)));
        }
        stringBuilder.append("]");
       // System.out.println(stringBuilder);
        return  stringBuilder.toString();
    }

測試代碼

public static void main(String[] args) {
        UserInfo userInfo1 = new UserInfo(001, "花花1", '女');
        Prov prov = new Prov("sx001","西安市");
        
       System.out.println("json");
        System.out.println(objToJson(userInfo1));
        
        System.out.println("jsonArry");
        UserInfo userInfo2 = new UserInfo(002, "花花2", '女');
        UserInfo userInfo3 = new UserInfo(003, "花花3", '女');
        List list=new ArrayList();
        list.add(userInfo1);
        list.add(userInfo2);
        list.add(userInfo3);
        System.out.println(objToJsonArray(list));
    }

到此這篇關(guān)于Java通過反射機(jī)制將對象封裝成JSON和JsonArray格式的文章就介紹到這了,更多相關(guān)Java反射封裝對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

电白县| 安新县| 赣榆县| 襄城县| 松溪县| 山西省| 廊坊市| 昌都县| 象州县| 瑞昌市| 延边| 奇台县| 罗甸县| 崇阳县| 万山特区| 六安市| 黎平县| 锡林郭勒盟| 项城市| 长子县| 鲜城| 汾西县| 三都| 瑞昌市| 若羌县| 盈江县| 靖宇县| 微博| 乐陵市| 河东区| 边坝县| 保定市| 和顺县| 泸西县| 贵州省| 南平市| 米林县| 星子县| 察隅县| 保定市| 南安市|