天天看點

【Util】java copy bean 反射

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/inforstack/article/details/50549883

@SuppressWarnings("unchecked")
	public <S, T> T copySuperBean(Object source,  Class<T> target) throws InstantiationException, IllegalAccessException{
		if (source == null) {
			return null;
		}
		if (target == null) {
			target = (Class<T>) source.getClass();
		}
		T newBean = target.newInstance();
		Class<? extends Object> ss = source.getClass();
		Class<?> ann = 	ss.getSuperclass();
		if (ann.newInstance() instanceof BaseMsg && newBean instanceof WechatMessage) {
			Field[] fields = ann.getDeclaredFields();
	        for (Field field : fields) {  
	            Object value = null;  
	            String name = field.getName();
	            String upperName = name.substring(0, 1).toUpperCase() + name.substring(1);  
	            try {  
	            	String getName = String.format("get%s", upperName);
	            	String setName = String.format("set%s", upperName);
	            	 Method getMethod = source.getClass().getMethod(getName,  new Class[] {});
	        	    Method setMethod = newBean.getClass().getMethod(setName,  new Class[] {field.getType()});
	        	    value = getMethod.invoke(source);
	                if (value == null) {
	                    continue;  
	                }
	                setMethod.invoke(newBean, value);
	            } catch (Exception e) {  
	                e.printStackTrace();  
	            }  
	        }
		}
        return newBean;
	}