@Test public void testGetGenericClass() { assertEquals(List.class, ClassUtil.getGenericClass(List.class)); assertEquals(List.class, ClassUtil.getGenericClass(new TypeRef<List<Integer>>() {}.getType())); }
public static Class<?> getGenericClass(Type type) { if (type == null) return null; if (type instanceof Class<?>) return (Class<?>)type; if (type instanceof ParameterizedType) return (Class<?>)(((ParameterizedType)type).getRawType()); if (type instanceof WildcardType) { WildcardType wt = (WildcardType) type; if(wt.getUpperBounds().length > 0) return getGenericClass(wt.getUpperBounds()[0]); return Object.class; } if (type instanceof TypeVariable) { TypeVariable<?> tv = (TypeVariable<?>) type; if(tv.getBounds().length > 0) return getGenericClass(tv.getBounds()[0]); return Object.class; } throw new RuntimeException("Unexpected type: cls=" + type.getClass() + "; string=" + type); }
ClassUtil { public static Class<?> getGenericClass(Type type) { if (type == null) return null; if (type instanceof Class<?>) return (Class<?>)type; if (type instanceof ParameterizedType) return (Class<?>)(((ParameterizedType)type).getRawType()); if (type instanceof WildcardType) { WildcardType wt = (WildcardType) type; if(wt.getUpperBounds().length > 0) return getGenericClass(wt.getUpperBounds()[0]); return Object.class; } if (type instanceof TypeVariable) { TypeVariable<?> tv = (TypeVariable<?>) type; if(tv.getBounds().length > 0) return getGenericClass(tv.getBounds()[0]); return Object.class; } throw new RuntimeException("Unexpected type: cls=" + type.getClass() + "; string=" + type); } }
ClassUtil { public static Class<?> getGenericClass(Type type) { if (type == null) return null; if (type instanceof Class<?>) return (Class<?>)type; if (type instanceof ParameterizedType) return (Class<?>)(((ParameterizedType)type).getRawType()); if (type instanceof WildcardType) { WildcardType wt = (WildcardType) type; if(wt.getUpperBounds().length > 0) return getGenericClass(wt.getUpperBounds()[0]); return Object.class; } if (type instanceof TypeVariable) { TypeVariable<?> tv = (TypeVariable<?>) type; if(tv.getBounds().length > 0) return getGenericClass(tv.getBounds()[0]); return Object.class; } throw new RuntimeException("Unexpected type: cls=" + type.getClass() + "; string=" + type); }  }
ClassUtil { public static Class<?> getGenericClass(Type type) { if (type == null) return null; if (type instanceof Class<?>) return (Class<?>)type; if (type instanceof ParameterizedType) return (Class<?>)(((ParameterizedType)type).getRawType()); if (type instanceof WildcardType) { WildcardType wt = (WildcardType) type; if(wt.getUpperBounds().length > 0) return getGenericClass(wt.getUpperBounds()[0]); return Object.class; } if (type instanceof TypeVariable) { TypeVariable<?> tv = (TypeVariable<?>) type; if(tv.getBounds().length > 0) return getGenericClass(tv.getBounds()[0]); return Object.class; } throw new RuntimeException("Unexpected type: cls=" + type.getClass() + "; string=" + type); }  @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setStaticPrivateField(String className, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code static void setPrivateField(Object obj, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setPrivateField(Class<?> cls, Object obj, String fieldName, Object value); static Field getDeclaredField(Class<?> cls, String name); static Map<String, BeanProperty> getProperties(Class<?> cls); static Object getObjectByPath(String path); static Object getObjectByPath(Class<?> cls, Object obj, List<String> relativePath); static Object getObjectProperty(Class<?> cls, Object obj, String propertyName); static Class<?> getGenericClass(Type type); static Type[] getGenericTypeActualParams(Type type); static Type[] getGenericTypeActualParamsForInterface(Type type, Class<?> intf); static List<Class<?>> getAllInterface(Class<?> cls); static Class<?> findInterface(Class<?> cls, Class<?> itf); static Field[] getAllFields(Class<?> cls); static Method[] getAllMethods(Class<?> cls); static T stringToEnum(Class<T> cls, String str); @SuppressWarnings({ "unchecked", "rawtypes" }) static T stringToSimpleObject(String str, Class<T> cls, BeanConvertContext ctx); static boolean isSimpleType(Class<?> cls); static Object objectToSimpleType(Object obj, Class<?> cls); static Type getType(String typeName); static StackTraceElement findCallerStackTrace(Class<?> calleeClass); }
ClassUtil { public static Class<?> getGenericClass(Type type) { if (type == null) return null; if (type instanceof Class<?>) return (Class<?>)type; if (type instanceof ParameterizedType) return (Class<?>)(((ParameterizedType)type).getRawType()); if (type instanceof WildcardType) { WildcardType wt = (WildcardType) type; if(wt.getUpperBounds().length > 0) return getGenericClass(wt.getUpperBounds()[0]); return Object.class; } if (type instanceof TypeVariable) { TypeVariable<?> tv = (TypeVariable<?>) type; if(tv.getBounds().length > 0) return getGenericClass(tv.getBounds()[0]); return Object.class; } throw new RuntimeException("Unexpected type: cls=" + type.getClass() + "; string=" + type); }  @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setStaticPrivateField(String className, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code static void setPrivateField(Object obj, String fieldName, Object value); @Deprecated //Used only for testing, don't use in production code @SneakyThrows static void setPrivateField(Class<?> cls, Object obj, String fieldName, Object value); static Field getDeclaredField(Class<?> cls, String name); static Map<String, BeanProperty> getProperties(Class<?> cls); static Object getObjectByPath(String path); static Object getObjectByPath(Class<?> cls, Object obj, List<String> relativePath); static Object getObjectProperty(Class<?> cls, Object obj, String propertyName); static Class<?> getGenericClass(Type type); static Type[] getGenericTypeActualParams(Type type); static Type[] getGenericTypeActualParamsForInterface(Type type, Class<?> intf); static List<Class<?>> getAllInterface(Class<?> cls); static Class<?> findInterface(Class<?> cls, Class<?> itf); static Field[] getAllFields(Class<?> cls); static Method[] getAllMethods(Class<?> cls); static T stringToEnum(Class<T> cls, String str); @SuppressWarnings({ "unchecked", "rawtypes" }) static T stringToSimpleObject(String str, Class<T> cls, BeanConvertContext ctx); static boolean isSimpleType(Class<?> cls); static Object objectToSimpleType(Object obj, Class<?> cls); static Type getType(String typeName); static StackTraceElement findCallerStackTrace(Class<?> calleeClass); static final Type[] EMPTY_TYPE_ARRAY; static final Map<String, Class<?>> PRIMITIVE_TYPE_MAP; }