如何使用Java反射将值从Java Bean自动复制到Protobuf消息对象?

use*_*116 5 java reflection protocol-buffers

通常,我可以使用具有Java反射的beanutils在两个具有相同属性名称的java bean之间复制值,例如PropertyUtils.setProperty(....)

在protobuf Message中,我们使用消息构建器类来设置值。这行得通,但是我宁愿使用反射将属性从Bean自动复制到消息中,因为两者具有相同的属性名称和类型。

当我在构建器对象(从message.newBuilder()获得)上调用PropertyUtils.setProperty时,得到此消息。

java.lang.NoSuchMethodException:属性“ testProp”在类“ testsuff.TestBeanProtos $ TestBeanMessage $ Builder”中没有setter方法

如何使用Java反射将值从Java bean自动复制到protobuf消息对象(反之亦然)?

Sta*_*lin 1

您可以抛出所有属性getClass().getFields()并使用反射进行复制。它会像这样:

for(Field f : to.getClass().getFields()){
    f.set(to, from.getClass().getField(f.getName()).get(from));
}
Run Code Online (Sandbox Code Playgroud)

+可能您可能会使用field.setAccessible(true)调用。