集册 Java实例教程 获取静态场

获取静态场

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

439
获取静态场
/* 来自 NowJava.com*/

//package com.nowjava;

import java.lang.reflect.Field;


import java.util.HashMap;


public class Main {

    private static HashMap<String, Field> sFieldCache = new HashMap<String, Field>();


    public static Object getStaticField(Class<?> clazz, String fieldName) {

        Object result = null;

        try {

            Field field = getField(clazz, fieldName);

            result = field.get(clazz);

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        } catch (IllegalArgumentException e) {

            e.printStackTrace();
            /* 
            *来 自
             nowjava - 时  代  Java
            */

        } catch (Throwable e) {

            e.printStackTrace();

        }

        return result;

    }


    private static Field getField(Class<?> clazz, String fieldName)

            throws Throwable {

        String fieldFullName = genFieldFullName(clazz, fieldName);

        if (sFieldCache.containsKey(fieldFullName))

            return sFieldCache.get(fieldFullName);

        Field field = null;

        try {

            field = clazz.getField(fieldName);

        } catch (NoSuchFieldException e) {

        }

        if (field == null) {

            try {

                field = clazz.getDeclaredField(fieldName);

                field.setAccessible(true);

            } catch (NoSuchFieldException e) {

            }

        }

        if (field == null) {

            for (clazz = clazz.getSuperclass(); clazz != Object.class; clazz = clazz

                    .getSuperclass()) {

                try {

                    field = clazz.getDeclaredField(fieldName);

                    field.setAccessible(true);

                } catch (NoSuchFieldException e) {

                }

            }

        }

        if (field == null) {

            String msg = "";

            msg = "Can't get Field from Class " + clazz.getSimpleName()

                    + ":" + fieldName;

            throw new Throwable
展开阅读全文