package genericPro;
import java.lang.reflect.*;
import java.util.*;
public class GenericReflectionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Class> cl=Pair.class;
// printClass(cl);
// for(Method m:cl.getDeclaredMethods())
// printMethod(m);
Type sc=cl.getGenericSuperclass();
System.out.print(sc);
}
public static void printClass(Class> cl)
{
System.out.print(cl);
printTypes(cl.getTypeParameters(),"<",",",">",true);
Type sc=cl.getGenericSuperclass();
if(sc!=null){
System.out.print(" extends ");
printType(sc,false);
}
printTypes(cl.getGenericInterfaces()," implements ",", ","",false);
System.out.println();
}
public static void printMethod(Method m){
String name=m.getName();
System.out.print(Modifier.toString(m.getModifiers()));
System.out.print(" ");
printTypes(m.getTypeParameters(),"<",", ","> ",true);
printType(m.getGenericReturnType(),false);
System.out.print(" ");
System.out.print(name);
System.out.print("(");
printTypes(m.getGenericParameterTypes(),"",", ","",false);
System.out.println(")");
}
public static void printTypes(Type[] types,String pre,String sep,String suf,boolean isDefinition){
if(pre.equals(" extends")&&Arrays.equals(types, new Type[]{Object.class})) return;
if(types.length>0) System.out.print(pre);
for(int i=0;i