集册 Java实例教程 设置对象字段

设置对象字段

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

548
设置对象字段

/** from 
n o w    j a v a  . c o m**/

//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 void setObjectField(Object object, String fieldName,

            Object value) {

        try {

            Field field = getField(object.getClass(), fieldName);

            field.set(object, value);

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        } catch (IllegalArgumentException e) {

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

        } catch (Throwable e) {

            e.printStackTrace();

        }

    }


    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);

        }

        sFieldCache.put(fieldFullName, field);

        return field;

    }


    public static Class<?> getClass(String className) {

        Class<?> clazz = null;

        try {

            clazz = Class.forName(className);

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return clazz;

    }


    public static Class<?> getClass(String className,

            boolean shouldInitialize, ClassLoader classLoader) {

        Class<?> clazz = null;

        
展开阅读全文