Java Field.getGenericType()/getType()方法的功能及区别说明

转自:

Java Field.getGenericType()/getType()方法的功能及区别说明

下文将讲述Field.getGenericType()/getType()方法的功能及不同点说明,如下所示:

Field.getGenericType()/getType()方法的功能:
     getType():返回属性声明时类型对象(返回class对象)
     getGenericType():返回属性声的Type类型
------------------------------------------------------------
getType() 和 getGenericType()的不同之处:
1.两者返回类型不同,一个是Class对象一个是Type接口
2.当属性是一个泛型,从getType()只能得到这个属性的接口类型
   从getGenericType()还能得到这个泛型的参数类型。
3.getGenericType()
   当前属性有签名属性类型就返回,否则就返回Field.getType()

例:

package com.java265.other;
import java.lang.reflect.Field;
public class TestClass {
	public static void main(String[] args) throws Exception {
		Class clazz = Class.forName("com.java265.other.User");	
		Field f = clazz.getDeclaredField("Name");
		System.out.println(f.getType());
		System.out.println(f.getGenericType());
		}
}
class User<T> {
	private int age;
	private T Name;
	public User() {
	}
}
------运行以上代码,将输出以下信息----
class java.lang.Object
T
package com.bjsasc.finance.common.utils; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class JavaBeanUtil { /** * * @param source 被复制的实体类对象 * @param to 复制完后的实体类对象 * @throws Exception */ public static void Copy(Object source, Object to) throws Exception { // 获取属性 BeanInfo sourceBean = Introspector.getBeanInfo(source.getClass(),java.lang.Object.class); PropertyDescriptor[] sourceProperty = sourceBean.getPropertyDescriptors(); BeanInfo destBean = Introspector.getBeanInfo(to.getClass(),java.lang.Object.class); PropertyDescriptor[] destProperty = destBean.getPropertyDescriptors(); try { for (int i = 0; i < sourceProperty.length; i++) { for (int j = 0; j < destProperty.length; j++) { if (sourceProperty[i].getName().equals(destProperty[j].getName())) { // 调用source的getter方法和dest的setter方法 destProperty[j].getWriteMethod().invoke(to,sourceProperty[i].getReadMethod().invoke(source)); break; } } } } catch (Exception e) { throw new Exception("属性复制失败:" + e.getMessage()); } } /** * Pojo -> Map<String, Object> * @param obj * @return * @throws Exception */ public static Map<String,Object> object2Map(Object obj)throws Exception{ Map<String,Object> map =new HashMap<>(); Field[] fields = obj.getClass().getDeclaredFields(); for(Field field:fields){ field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; } } 帮我优化下这个代码,考虑对象中有对象和对象集合的情况
04-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值