集册 Java实例教程 用吸气剂获得现场链价值

用吸气剂获得现场链价值

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

422
用吸气剂获得现场链价值
//n o w j a v a . c o m - 时  代  Java 提 供


import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

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{

    public static void main(String[] argv) throws Exception{

        Object baseObject = "nowjava.com";

        String fieldNameChain = "nowjava.com";

        System.out.println(getFieldChainValueWithGetters(baseObject,fieldNameChain));

    }
    /** from 
    时代Java公众号**/

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

            .getSimpleName());

    public static Object getFieldChainValueWithGetters(Object baseObject,

            String fieldNameChain) {

        String[] chain = fieldNameChain.split("[.]");

        if (chain.length == 1)

            return getFieldValueWithGetter(baseObject, chain[0]);


        return getFieldChainValueWithGetters(

                getFieldValueWithGetter(baseObject, chain[0]),

                fieldNameChain.substring(chain[0].length() + 1));

    }

    public static Object getFieldValueWithGetter(Object obj, Field field) {

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