package io.ebeaninternal.server.type; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class TypeReflectHelper { public static Class<?>[] getParams(Class<?> cls, Class<?> matchRawType) { Type[] types = getParamType(cls, matchRawType); Class<?>[] result = new Class<?>[types.length]; for (int i = 0; i < result.length; i++) { result[i] = getClass(types[i]); } return result; } public static Class<?> getClass(Type type) { while (true) { if (type instanceof ParameterizedType) { type = ((ParameterizedType) type).getRawType(); continue; } return (Class<?>) type; } } private static Type[] getParamType(Class<?> cls, Class<?> matchRawType) { Type[] gis = cls.getGenericInterfaces(); for (Type type : gis) { if (type instanceof ParameterizedType) { ParameterizedType paramType = (ParameterizedType) type; Type rawType = paramType.getRawType(); if (rawType.equals(matchRawType)) { return paramType.getActualTypeArguments(); } } } return null; } }