package com.nominanuda.zen.obj; import com.nominanuda.zen.obj.wrap.ObjWrapper; import org.junit.Test; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; public class GenericsTest { interface PagedResults<T> extends ObjWrapper { Integer start(); PagedResults<T> start(Integer i); Integer count(); PagedResults<T> count(Integer i); List<T> results(); PagedResults<T> results(List<T> l); String cursor(); PagedResults<T> cursor(String off); } interface Post extends ObjWrapper { Post code(Integer id); Integer code(); } interface MyTest { PagedResults<Post> listWall(); } @Test public void test() throws ClassNotFoundException { for (Method m : MyTest.class.getMethods()) { Type t1 = m.getGenericReturnType(); if (t1 instanceof ParameterizedType) { ParameterizedType t2 = (ParameterizedType)t1; Type[] actualTypeArgs = t2.getActualTypeArguments(); if (actualTypeArgs != null && actualTypeArgs.length == 1) { Type t = actualTypeArgs[0]; System.out.println(t.toString()); Class.forName(t.toString()).toString(); // System.out.println(Class.forName(t.getTypeName()).toString()); } } } } }