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

标签 java reflection inner-classes protocol-buffers

通常你会像这样创建一个 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,因为那里没有默认的公共(public)构造函数。

关于如何使用 Java 反射创建 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();

虽然我不完全明白反射在这种情况下有何用处,但这可能需要更深入地了解您要解决的确切问题。

关于java - 如何使用 java 反射创建 protobuf 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38925706/

相关文章:

android - 如何在Build-Tools 3.6.0中使用 “R.id object = new R.id();”?

java - 嵌套 Java 内部类的深度超过一层是否合理?

java - Spring初始化顺序

c# - 如何在 C# 中的这种奇怪情况下创建通用列表

java - 如何在运行 jsp 页面时查看 pdf 格式的 jasper 报告

java - 如果方法以 invoke 启动,Exceptions 不会导致崩溃

c++ - 如何在 C++ 中自定义嵌套类的方法

java - 在匿名类中使用实例

java - 在 Java 公历中设置区域设置

java - 仅当字符串中包含多个年份时才拆分字符串并创建自定义字符串