集册 Java实例教程 用Getter获取字段值

用Getter获取字段值

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

672
用Getter获取字段值


import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;
/*
时 代 J     a    v  a - nowjava.com 提 供
*/

import java.lang.reflect.Method;

import java.util.Collection;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;


public class Main{

    private static Logger log = Logger.getLogger(BeanUtil.class

            .getSimpleName());

    public static Object getFieldValueWithGetter(Object obj, Field field) {/** 来自 时 代 J a v a - N o w J a v a . c o m**/

        try {

            Method m = getGetterMethodForField(obj, field);

            m.setAccessible(true);

            return m.invoke(obj);

        } catch (NoSuchMethodException e) {

            log.log(Level.INFO, "No getter for field: " + field.getName()

                    + ", using field it's self", e);

            try {

                field.setAccessible(true);

                return field.get(obj);

            } catch (Throwable iae) {

                log.log(Level.SEVERE,

                        "Unable to access field even after enabling access.",

                        iae);

            }

        } catch (InvocationTargetException e) {

            log.log(Level.SEVERE,

                    "Unable to invoke getter on supplied object: " + obj

                            + ", field: " + field.getName(), e);

        } catch (IllegalAccessException e) {

            log.log(Level.SEVERE,

                    "Access not allowed on explicitly marked accessible field through reflection.",

                    e);

        }

        return null;

    }

    public static Object getFieldValueWithGetter(Object obj,

            String fieldName) {

        try {

            return getFieldValueWithGetter(obj, obj.getClass()

                    .getDeclaredField(fieldName));

        } catch (NoSuchFieldException e) {

            log.log(Level.SEVERE, "Unable to find field on object", e);

            return null;

        }

    }

    public static Method getGetterMethodForField(Object obj, Field field)

            throws NoSuchMethodException {

        try {

            return obj.getClass().getDeclaredMethod(

                    getGetterMethodNameForField(obj, field));

        } catch (NoSuchMethodException nsme) {

            log.log(Level.WARNING, "Can't find method.", nsme);

            throw nsme;

        }

    }

    public static Method getGetterMethodForField(Object obj,

            String fieldName) throws NoSuchMethodException,

            NoSuchFieldException {

        return obj.getClass().getDeclaredMethod(

                getGetterMethodNameForField(fieldName, obj.getClass()

                        .getDeclaredField(fieldName)));

    }

    public static Method getGetterMethodForField(Class obj, String fieldName)

            throws NoSuchMethodException, NoSuchFieldException {

        return obj.getDeclaredMethod(getGetterMethodNameForField(fieldName,

                obj.getDeclaredField(fieldName)));

    }

    public static String getGetterMethodNameForField(Object obj, Field fi
展开阅读全文