如何使用 java 反射创建 protobuf 实例?
How to create protobuf instances using java reflection?
通常你会像这样创建一个 protobuf class 实例:
Bar.Builder bld = Bar.newBuilder();
bld.setXYZ(...
我有一个使用 Java 反射实例化 protobuf 的用例 class:
Class clsBar = Class.forName("com.xyz.Foo$Bar");
Object instance = clsBar.newInstance(); // error here!
Method mth = clsBar.getMethod(...);
上面的代码在正常的 Java classes 下工作正常。但是对于生成的 protobuf class "com.xyz.Foo$Bar"
,它给了我一个 NoSuchMethodException
,因为那里没有默认的 public 构造函数。
关于如何使用 Java refection 创建 protobuf 实例有什么建议吗?问题是针对真正擅长 protobuf 内部结构的人。谢谢!
我认为你应该走完整个路:通过 Builder class:
//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();
虽然我不完全明白反射在这种情况下有何用处,但这可能需要更深入地了解您要解决的确切问题。
通常你会像这样创建一个 protobuf class 实例:
Bar.Builder bld = Bar.newBuilder();
bld.setXYZ(...
我有一个使用 Java 反射实例化 protobuf 的用例 class:
Class clsBar = Class.forName("com.xyz.Foo$Bar");
Object instance = clsBar.newInstance(); // error here!
Method mth = clsBar.getMethod(...);
上面的代码在正常的 Java classes 下工作正常。但是对于生成的 protobuf class "com.xyz.Foo$Bar"
,它给了我一个 NoSuchMethodException
,因为那里没有默认的 public 构造函数。
关于如何使用 Java refection 创建 protobuf 实例有什么建议吗?问题是针对真正擅长 protobuf 内部结构的人。谢谢!
我认为你应该走完整个路:通过 Builder class:
//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();
虽然我不完全明白反射在这种情况下有何用处,但这可能需要更深入地了解您要解决的确切问题。