1

我正在尝试编写一个适配器。我有近 50 个属性,我正试图从一个类适应另一个类。

我的代码如下所示:

public static Type2 getType2(Type1 type1)
{
...

  if(!StringUtils.isEmpty(type1.getAttribute1()) {
     type2.setAttribute1( type1.getAttribute1() );
  }
  // and so on for all the 50 attributes
...
}

有没有更好的方法来编写这个适配器方法?

4

2 回答 2

2

您可以使用一种通用方法将属性从一个实例复制到另一个实例:

public static <T> T copy(T source, T target) throws IllegalArgumentException, IllegalAccessException {
    for ( Field f : target.getClass().getDeclaredFields() ) {
        f.setAccessible( true );
        Object o = f.get( source );
        f.set( target, o);
    }
    return target;
}
于 2012-12-18T10:46:32.330 回答
2

如果属性名称匹配,您可能会考虑使用Apache Commons BeanUtils 。

如果不需要类型转换,您可以使用PropertyUtils.copyProperties()

public static Type2 getType2(Type1 type1) {
    Type2 type2 = new Type2();
    org.apache.commons.beanutils.PropertyUtils.copyProperties(type2, type1);
    return type2;
}

如果需要类型转换,请BeanUtils.copyProperties()改用。

于 2012-12-18T10:49:12.567 回答