`

Generic Classes & Reflect

阅读更多
abstract class TestGeneric1 <T extends java.util.List> {
	
	 public String getClassName() {
    	Class clazz = (Class) ((java.lang.reflect.ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    	 return clazz.getName();
    }
    
    
       public static void main(String[] args) {
    	class TestX extends TestGeneric1 <java.util.ArrayList>{
    		
    	};
    	
    	TestX test = new TestX();
    	System.out.println(test.getClassName());  //output  java.util.ArrayList
    	
    }
    
    
    
    
} 





abstract class TestGeneric2<T> {
 
 public String getClassName() {
   String genericSuperclass = queryGenericSuperclass(getClass()).getGenericSuperclass().toString();
   return genericSuperclass.substring(TestGeneric2.class.getName().length() + 1, genericSuperclass.length() - 1);
 }
 
 private Class queryGenericSuperclass(Class clazz) {
   if (clazz.getGenericSuperclass().toString().startsWith(TestGeneric2.class.getName())) {
     return clazz;
   } else {
     return queryGenericSuperclass(clazz.getSuperclass());
   }
 }
 
 

 
 public static void main(String[] args) throws Exception {
	 class TestX extends TestGeneric2<String> {
	 }
	 
	  TestGeneric2 test = new TestX();
	  System.out.println(test.getClassName()); //output java.lang.String;

 }
 

 
}
3
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics