/** * Borrowed from java.lang.class * * @param o * @return */ private static Class<?> toClass(Type o) { if (o instanceof GenericArrayType) { Class clazz = Array.newInstance(toClass(((GenericArrayType) o).getGenericComponentType()), 0).getClass(); return clazz; } return (Class<?>) o; }
/** * Retrieves Generic class from a collection field that has only one * argument. * * @param collectionField * the collection field * @return the generic class */ public static List<Class<?>> getGenericClasses(Field collectionField) { List<Class<?>> genericClasses = new ArrayList<Class<?>>(); if (collectionField == null) { return genericClasses; } Type[] parameters = ReflectUtils.getTypeArguments(collectionField); if (parameters != null) { for (Type parameter : parameters) { // workaround for jdk1.6 issue. genericClasses.add(toClass(parameter)); } } return genericClasses; }
genericClass = toClass(parameters[0]);