一尘不染

通过反射将所有值从一类中的字段复制到另一类中

java

我有一堂课,基本上是另一堂课的副本。

public class A {
  int a;
  String b;
}

public class CopyA {
  int a;
  String b;
}

我正在做的是在通过Web服务调用发送之前,将类中的值A放入。现在,我想创建一个反射方法,该方法基本上将类(按名称和类型)相同的所有字段在类之间复制。CopyA``CopyA``A``CopyA

我怎样才能做到这一点?

到目前为止,这是我所拥有的,但效果不佳。我认为这里的问题是我试图在要遍历的字段上设置一个字段。

private <T extends Object, Y extends Object> void copyFields(T from, Y too) {

    Class<? extends Object> fromClass = from.getClass();
    Field[] fromFields = fromClass.getDeclaredFields();

    Class<? extends Object> tooClass = too.getClass();
    Field[] tooFields = tooClass.getDeclaredFields();

    if (fromFields != null && tooFields != null) {
        for (Field tooF : tooFields) {
            logger.debug("toofield name #0 and type #1", tooF.getName(), tooF.getType().toString());
            try {
                // Check if that fields exists in the other method
                Field fromF = fromClass.getDeclaredField(tooF.getName());
                if (fromF.getType().equals(tooF.getType())) {
                    tooF.set(tooF, fromF);
                }
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

我敢肯定一定有人已经这样做了


阅读 246

收藏
2020-09-08

共1个答案

一尘不染

如果您不介意使用第三方库,则Apache
Commons的BeanUtils将使用轻松地处理此问题copyProperties(Object, Object)

2020-09-08