如何使用java反射创建protobuf实例



通常创建一个protobuf类实例如下:

Bar.Builder bld = Bar.newBuilder();
bld.setXYZ(...

我有一个使用Java反射实例化protobuf类的用例:

Class clsBar = Class.forName("com.xyz.Foo$Bar");
Object instance = clsBar.newInstance(); // error here!
Method mth = clsBar.getMethod(...);

上面的代码可以很好地处理普通的Java类。但是对于生成的protobuf类"com.xyz.Foo$Bar",它给我一个NoSuchMethodException,因为那里没有默认的公共构造函数。

关于如何使用Java反射创建protobuf实例的任何建议?这个问题是问那些真正擅长原生动物内部结构的人的。谢谢!

我认为你应该用完整的方法:通过Builder类:

//get Bar class
Class barClass = Class.forName("com.xyz.Foo$Bar");
//instantiate Builder through newBuilder method
Method newBuilderMethod = barClass.getMethod("newBuilder");
Bar.Builder builder = (Bar.Builder) newBuilderMethod.invoke(null);
// ... set properties  -- can be through reflection if necessary
//build:
Bar bar = builder.build();

虽然我不清楚反射在这种情况下有什么用处,但这可能需要对您要解决的问题有更深入的了解。

相关内容

  • 没有找到相关文章

最新更新