集册 Java实例教程 设置静态字段

设置静态字段

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

436
设置静态字段


//package com.nowjava;
/* 
*来 自
 时 代 J a v a
*/

import java.lang.reflect.Field;


import java.util.HashMap;


public class Main {

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


    public static void setStaticField(Class<?> clazz, String fieldName,

            Object value) {

        try {

            Field field = getField(clazz, fieldName);

            field.set(clazz, value);

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        } catch (IllegalArgumentException e) {

            e.printStackTrace();

        } catch (Throwable e) {

            e.printStackTrace();
            /* 
             来自 
            *n  o  w  j  a  v  a . c o m*/

        }

    }


    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(msg)
展开阅读全文