通常,您将创建一个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 Refection创建protobuf实例的任何建议?问题是针对真正擅长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();
尽管我不确定在这种情况下反射有什么用,但这可能需要更深入地了解您要解决的确切问题.
标签:reflection,inner-classes,protocol-buffers,java
来源: https://codeday.me/bug/20191118/2027071.html