Java 协议缓冲区 - 反射



我是协议缓冲区和探索反射方法的新手。我看到一个方法GetReflection()来获取C++中的反射接口,但是,我在Java中找不到类似的方法。有谁知道如何在 Java 中获取反射接口?

相当于Protobuf-C++"反射"接口的Java只是com.google.protobuf.Message接口。 所有消息对象都实现了这一点,并且它具有像 getField() 这样的方法,通过描述符读取任意字段。 同样,所有构建器都实现了具有setField()等的Message.Builder。 与 C++ 不同,此功能不会委派给单独的对象。

你能描述一下你为什么要做???,我知道我会根据这一点定制答案

吗?
  • 正如其他人所指出的,您可以在java中的任何类上使用反射。
  • java版本提供了DynamicMessage Class。
  • 根据你尝试做的事情,你可能会发现DynamicMessage Class就是你所追求的。此类允许您使用原型描述符读取任意协议缓冲区,并通过 getField 方法等访问字段。您将需要原型描述符中的协议缓冲区(您可以使用 protoc 命令的 --descriptor_set_out= 参数来获取它)。
  • 如果您不考虑速度,protoc 命令将生成使用反射的类。

反射接口可以在反射包中找到。 通常,人们会使用类实例访问接口。

public static void main(String[] $)
{
    Class clazz = String.class;
    System.out.println(clazz.getName()); // "java.lang.String"
}

最新更新