举例:
常见 的 model 转 vo。
通常按照约定,大部分属性 都相同。
但是,vo可能有些自定义的名字,比如user表 用户名叫做“name”,userVo中可能叫做“username”。
需要手动copy下。
这种自定义的工作,就可以 定义一个 function。
public static void main(String[] args) { User user = new User(); user.setId( 1 ); user.setName( "lei" ); UserVo userVoNoName = BeanKit.build(user, UserVo. class ); System.out.println(userVoNoName); UserVo userVo = BeanKit.build(user, new Function<User,UserVo>(){ @Override public UserVo apply(User t) { UserVo vo = new UserVo(); vo.setUsername(t.getName()); return vo; } }); System.out.println(userVo); } // function 里面可以自定义属性 public static <S, T> T build(S source, Function<S, T> function) { try { T target = function.apply(source); // 复用现有的 copyProperties(source, target); return target; } catch (Exception e) { e.printStackTrace(); } return null ; } public static <T> T build(Object source, Class<T> destClazz) { try { T bean = destClazz.newInstance(); // 复用现有的 copyProperties(source, bean); return bean; } catch (Exception e) { e.printStackTrace(); } return null ; } |
输出:
UserVo(id=1, username=null)
UserVo(id=1, username=lei)
import lombok.Data; @Data public class User { private Integer id; private String name; } import lombok.Data; @Data public class UserVo { private Integer id; private String username; } |