本文导引:
通过反射机制
- 获取类的基本信息
- 获取类的注解信息
- 获取泛型信息
				?
			
| 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
 
								25
 
								26
 
								27
 
								28
 
								29
 
								30
 
								31
 
								32
 
								33
 
								34
 
								35
 
								36
						 | packagereflection;@AnnotationUserTable("datebaseExample")publicclassUser {@AnnotationUserField(uName="name",type="varchar",length=10)privateString name;@AnnotationUserField(uName="age",type="int",length=3)privateintage;@AnnotationUserField(uName="sex",type="char",length=2)privateString sex;publicUser() {super();}publicUser(String name, intage, String sex) {super();this.name = name;this.age = age;this.sex = sex;}publicString getName() {returnname;}publicvoidsetName() {this.name = "test";}publicintgetAge() {returnage;}publicString getSex() {returnsex;}publicvoidsetSex(String sex) {this.sex = sex;}}bean:User | 
				?
			
| 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
						 | packagereflection;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target(value={ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME) public@interfaceAnnotationUserTable {String value();}自定义注解:类注解 | 
				?
			
| 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
						 | packagereflection;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;@Target(value={ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)public@interfaceAnnotationUserField {String uName();String type();intlength(); }自定义注解:属性注解 | 
				?
			
| 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
 
								25
 
								26
 
								27
 
								28
 
								29
 
								30
 
								31
 
								32
 
								33
 
								34
 
								35
 
								36
 
								37
 
								38
 
								39
 
								40
 
								41
 
								42
 
								43
 
								44
 
								45
 
								46
 
								47
 
								48
 
								49
 
								50
 
								51
 
								52
 
								53
 
								54
 
								55
 
								56
						 | packagereflection;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;publicclassDemo01 {staticClass<?> c = null;publicstaticvoidmain(String[] args) {try{c = Class.forName("reflection.User");} catch(ClassNotFoundException e) {e.printStackTrace();}test();//获取类的属性、方法等信息}staticvoidtest(){try{// 获取类的名称System.out.println("获取类的名称");System.out.println("getName():"+ c.getName());// 获得包名+类名System.out.println("getSimpleName():"+ c.getSimpleName());// 获得类名System.out.println("getCanonicalName():"+ c.getCanonicalName());// 获得类名System.out.println("*******************************");// 获取属性信息System.out.println("获取属性信息");Field[] fields = c.getDeclaredFields();// Field[] fields = c.getFields(); 只能获取public修饰的属性信息for(Field f : fields) {String fName = f.getName();System.out.println(c.getDeclaredField(fName));}System.out.println("*******************************");// 获取方法信息System.out.println("获取方法信息");Method[] methods = c.getDeclaredMethods();for(Method m : methods) {// String mName = m.getName();System.out.println(m.getName() + "-->"+ m);}System.out.println("通过名称单独获取对应的getName方法:"+ c.getDeclaredMethod("getName"));System.out.println("通过名称单独获取对应的setSex方法:"+ c.getDeclaredMethod("setSex", String.class));// 方法有参,必须传递参数类型System.out.println("*******************************");// 获取构造器信息System.out.println("获取构造器信息");Constructor<?>[] constructor = c.getConstructors();for(Constructor<?> cons : constructor) {System.out.println(cons);}} catch(NoSuchFieldException | SecurityException e) {e.printStackTrace();} catch(NoSuchMethodException e) {e.printStackTrace();}}}main1:通过反射机制获取类的基本信息 | 
output:
				?
			
| 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
						 | 获取类的名称getName():reflection.UsergetSimpleName():UsergetCanonicalName():reflection.User*******************************获取属性信息private java.lang.String reflection.User.nameprivate int reflection.User.ageprivate java.lang.String reflection.User.sex*******************************获取方法信息getName-->public java.lang.String reflection.User.getName()setName-->public void reflection.User.setName()setSex-->public void reflection.User.setSex(java.lang.String)getSex-->public java.lang.String reflection.User.getSex()getAge-->public int reflection.User.getAge()通过名称单独获取对应的getName方法:public java.lang.String reflection.User.getName()通过名称单独获取对应的setSex方法:public void reflection.User.setSex(java.lang.String)*******************************获取构造器信息public reflection.User()public reflection.User(java.lang.String,int,java.lang.String)View Console | 
下面的例子,是通过反射机制获取类的注解信息。
				?
			
| 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
 
								25
 
								26
 
								27
 
								28
 
								29
 
								30
 
								31
 
								32
 
								33
 
								34
 
								35
 
								36
 
								37
						 | packagereflection;importjava.lang.reflect.Field;/*** 获取类的属性、方法等信息* 1.获取元素对象(如属性)(注意:读取类的注解,看似要少一步)* 2.获取该元素对象的指定类型的注解对象* 3.读取注解对象相应的值*/publicclassTest02 {staticClass<?> c = null;publicstaticvoidmain(String[] args) {try{c = Class.forName("reflection.User");} catch(ClassNotFoundException e) {e.printStackTrace();}test();}staticvoidtest(){try{// 获取类的指定注解System.out.println("***********类的指定注解**************");AnnotationUserTable table = (AnnotationUserTable)c.getAnnotation(AnnotationUserTable.class);System.out.println(table.value());// 获取属性的指定注解System.out.println("***********属性的指定注解*************");Field field = c.getDeclaredField("name");AnnotationUserField annoField = (AnnotationUserField)field.getAnnotation(AnnotationUserField.class);System.out.println(annoField.uName()+"\\t"+annoField.type()+"\\t"+annoField.length());// 根据获得的表名、字段的信息,拼写出DDL语句,然后通过JDBC连接数据库查询} catch(NoSuchFieldException e) {e.printStackTrace();} catch(SecurityException e) {e.printStackTrace();}}} | 
output:
				?
			
| 
								1
 
								2
 
								3
 
								4
						 | ***********类的指定注解**************datebaseExample***********属性的指定注解*************name varchar 10 | 
下面的例子,是通过反射机制获取泛型信息
				?
			
                	
    
	
	
		
		
	
 
	
		
			
	
	 
     
	
			
                 
			
		
		
			
			
			
    
        
        
	
			
						
			
            			
    		
    		
		
	    
    	
    	
        
    	
    
| 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
 
								25
 
								26
 
								27
 
								28
 
								29
 
								30
 
								31
 
								32
 
								33
 
								34
 
								35
 
								36
 
								37
 
								38
						 | packagereflection;importjava.lang.reflect.Method;importjava.lang.reflect.Type;importjava.util.List;importjava.util.Map;/*** 通过反射机制获取泛型* @author Administrator**/publicclassTest03 { publicstaticvoidmain(String[] args) {Class<?> c = Test03.class;try{System.out.println("*******获取参数值的类型**********");Method m1 = c.getDeclaredMethod("method01", Map.class,List.class);Type[] types = m1.getGenericParameterTypes();for(Type t:types){System.out.println(t.getTypeName());System.out.println(t.toString()); }System.out.println("*******获取返回值的类型**********");Method m2 = c.getDeclaredMethod("method02");Type ret = m2.getGenericReturnType();System.out.println(ret.getTypeName());System.out.println(ret.toString());} catch(NoSuchMethodException | SecurityException e) {e.printStackTrace();}}publicvoidmethod01(Map<String,String> args1,List<Integer> args2){}publicMap<String,String> method02(){returnnull;}}通过反射机制获取泛型信息 | 
output:
				?
			
	
						
						
						
						
						
						
						
																		
    
        
    
        
                        
                
                    
                
                
                
                    
                
                
                
                    
                
                
                
                    
                
                        
    
 																		
						
																		
    
        
 												
						
																		
	
	
		
				
			
																		
						
						
					
				
				                | 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
						 | java.util.Map<java.lang.String, java.lang.String>java.util.Map<java.lang.String, java.lang.String>java.util.Map<java.lang.String, java.lang.String>java.util.Map<java.lang.String, java.lang.String>java.util.List<java.lang.Integer>java.util.List<java.lang.Integer>View Console | 
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持快网idc!
原文链接:http://www.cnblogs.com/fhw-space/p/6367325.html#start
相关文章
             猜你喜欢
        
        - 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
			TA的动态
			
		
				- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
				您的支持,是我们最大的动力!				
			
		
        热门文章
        
    
    - 
            2025-06-04 96
- 
            2025-06-04 80
- 
            2025-05-27 102
- 
            2025-05-29 91
- 
            2025-06-04 39
		热门评论
	
	 
        
 
    		 
            	 
															 
         
        
 
                        