/** * Guesses the clazz of a type. * * @param type * The type. * @param loops * Amount of loops. * @return The clazz. */ private static Class<?> guessClazz(final Type type, final int loops) { final int looped = loops + 1; Class<?> result; if (type instanceof Class) { result = (Class<?>) type; } else if (type instanceof ParameterizedType) { final ParameterizedType paramType = (ParameterizedType) type; result = GenericsUtil.decideGuessClazz(looped, paramType.getRawType()); } else if (type instanceof TypeVariable<?>) { final TypeVariable<?> typeVar = (TypeVariable<?>) type; final Type[] bounds = typeVar.getBounds(); result = GenericsUtil.decideGuessClazz(looped, bounds[0]); } else if (type instanceof WildcardType) { final WildcardType wildType = (WildcardType) type; final Type[] bounds = wildType.getUpperBounds(); result = GenericsUtil.decideGuessClazz(looped, bounds[0]); } else { result = Object.class; } return result; }