集册 Java实例教程 获取所有字段并通过反射返回地图

获取所有字段并通过反射返回地图

欢马劈雪     最近更新时间:2020-01-02 10:19:05

635
提示:您可在线编辑运行本教程的实例 - 运行实例,去试试!
获取所有字段并通过反射返回地图


//package com.nowjava;

import java.lang.reflect.Field;

import java.lang.reflect.Method;/*来 自 nowjava - 时代Java*/

import java.lang.reflect.Modifier;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


public class Main {

    public static void main(String[] argv) throws Exception {
    /**
     from
    * 时代Java公众号 
    **/

        Class clazz = String.class;

        System.out.println(getFieldMap(clazz));

    }


    /**

     * Must be non-transient.

     * Must be non-final.

     * Will be set accessible if possible.

     */

    public static Map<String, Field> getFieldMap(Class<?> clazz) {

        Map<String, Field> ret = new HashMap<String, Field>();


        for (Field field : findAllFields(clazz)) {

            if (Modifier.isTransient(field.getModifiers()))

                continue;

            if (Modifier.isFinal(field.getModifiers()))

                continue;

            makeAccessible(field);

            ret.put(field.getName(), field);

        }


        return ret;

    }


    public static List<Field> findAllFields(Class<?> clazz) {

        List<Field> fields = new ArrayList<Field>();

        for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {

            fields.addAll(Arrays.asList(c.getDeclaredFields()));

        }

        return fields;

    }


    public static void makeAccessible(Field field) {

        if ((!Modifier.isPublic(field.getModifiers())

                || !Modifier.isPublic(field.getDeclaringClass()

                        .getModifiers()) || Modifier.isFinal(field

                .getModifiers())) &&
展开阅读全文