Java Reflection Generic Type from Class getGenericClass(Object object, int index)

Here you can find the source of getGenericClass(Object object, int index)

Description

get Generic Class

License

Open Source License

Declaration

public static Class<?> getGenericClass(Object object, int index) 

Method Source Code

//package com.java2s;
/**//from   ww  w.  j a  va 2s  .  c  o  m
 * DynamicReports - Free Java reporting library for creating reports dynamically
 *
 * Copyright (C) 2010 - 2015 Ricardo Mariaca
 * http://www.dynamicreports.org
 *
 * This file is part of DynamicReports.
 *
 * DynamicReports is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * DynamicReports is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with DynamicReports. If not, see <http://www.gnu.org/licenses/>.
 */

import java.lang.reflect.ParameterizedType;

public class Main {
    public static Class<?> getGenericClass(Object object, int index) {
        ParameterizedType genericSuperclass = getParameterizedType(object.getClass());
        if (genericSuperclass == null) {
            return String.class;
        }
        Class<?> rawType = getRawType(genericSuperclass.getActualTypeArguments()[index]);
        if (rawType == null) {
            return String.class;
        }
        return rawType;
    }

    private static ParameterizedType getParameterizedType(Class<?> classs) {
        if (classs == null) {
            return null;
        }
        if (classs.getGenericSuperclass() instanceof ParameterizedType) {
            return (ParameterizedType) classs.getGenericSuperclass();
        }
        return getParameterizedType((Class<?>) classs.getGenericSuperclass());
    }

    private static Class<?> getRawType(Object typeArgument) {
        if (typeArgument instanceof ParameterizedType) {
            return getRawType(((ParameterizedType) typeArgument).getRawType());
        } else {
            if (typeArgument instanceof Class<?>) {
                return (Class<?>) typeArgument;
            } else {
                return null;
            }
        }
    }
}

Related

  1. getGenericClass(final Class class1)
  2. getGenericClass(final Class parametrizedClass, int pos)
  3. getGenericClass(final Class parametrizedClass, int pos)
  4. getGenericClass(final Method method)
  5. getGenericClass(Object o)
  6. getGenericClass(Object source, ParameterizedType type)
  7. getGenericClass(Type type)
  8. getGenericClassByIndex(Type genericType, int index)
  9. getGenericClassType(Class clazz, Class filterClass)