public static <T extends BeanWrapApi> T build(Class<T> beanClass, Object source) { Class basicClass = BasicEntity.class; Class sourceClass = source.getClass(); T bean; try { Constructor constructor = beanClass.getConstructor(sourceClass); bean = (T) constructor.newInstance(source); } catch (Exception ignore) { try { bean = beanClass.newInstance(); } catch (Exception e) { return null; } } bean.preHandle(); for (Field field : beanClass.getFields()) { String name = field.getName(); try { Field sourceField = sourceClass.getDeclaredField(name); sourceField.setAccessible(true); // Field sourceField = sourceClass.getField(name); if (sourceField != null) { field.set(bean, sourceField.get(source)); } } catch (Exception e) { // Logger.error(e, "Error in BeanUtils"); } } BasicBean bb = (BasicBean) bean; BasicEntity be = (BasicEntity) source; bb.id = be.getId(); bb.isDeleted = be.isDeleted(); bb.createdTime = be.getCreatedTime(); bb.updatedTime = be.getUpdatedTime(); bean.postHandle(source); return bean; }