abstract class A<T> {
  public A(){
  Class clazz = this.getClass();
  Type type = clazz.getGenericSuperclass();
  ParameterizedType pType = (ParameterizedType) type;
  Tpye[] types = pType.getActualTypeArguments();
  Class c = (Class)type[0];
  
  //Class c = (Class)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  
  System.out.println(c.getName());
  }
}