get Getter Method For Chain Value - Java Reflection

Java examples for Reflection:Getter

Description

get Getter Method For Chain Value

Demo Code


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{
        Class baseObjectClass = String.class;
        String fieldNameChain = "java2s.com";
        System.out.println(getGetterMethodForChainValue(baseObjectClass,fieldNameChain));
    }/*  w w  w .  ja va 2  s . c om*/
    private static Logger log = Logger.getLogger(BeanUtil.class
            .getSimpleName());
    public static Method getGetterMethodForChainValue(
            Class baseObjectClass, String fieldNameChain)
            throws NoSuchMethodException, NoSuchFieldException {
        if (Collection.class.isAssignableFrom(baseObjectClass))
            baseObjectClass = getCollectionGenericType(baseObjectClass);
        String[] chain = fieldNameChain.split("[.]");
        if (chain.length == 1)
            return getGetterMethodForField(baseObjectClass, chain[0]);

        return getGetterMethodForChainValue(
                getPropertyType(baseObjectClass, chain[0]),
                fieldNameChain.substring(chain[0].length() + 1));
    }
    public static Class getCollectionGenericType(Class<Collection> c) {
        return c.getClass().getTypeParameters()[0].getGenericDeclaration();
    }
    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 Class getPropertyType(Class baseClass, String fieldName)
            throws NoSuchFieldException {
        if (Collection.class.isAssignableFrom(baseClass))
            baseClass = getCollectionGenericType(baseClass);
        return baseClass.getDeclaredField(fieldName).getType();
    }
    public static String getGetterMethodNameForField(Object obj, Field field) {
        if (field.getType() == Boolean.class
                || field.getType() == boolean.class) {
            String isGetterName = "is"
                    + field.getName().substring(0, 1).toUpperCase()
                    + field.getName().substring(1);
            try {
                obj.getClass().getDeclaredMethod(isGetterName);
                return isGetterName;
            } catch (NoSuchMethodException nsme) {
            }
        }
        return "get" + field.getName().substring(0, 1).toUpperCase()
                + field.getName().substring(1);
    }
}

Related Tutorials