3

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

4

3 回答 3

7

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

于 2013-10-18T23:43:52.107 回答
1

你能描述一下你为什么要这样做吗???,我知道我会考虑到这一点来定制答案

  • 正如其他人所指出的,您可以在 java 中的任何类上使用反射。
  • java 版本提供DynamicMessage 类。根据您尝试做的事情,您可能会发现DynamicMessage 类是您所追求的。此类允许您使用 proto 描述符读取任意协议缓冲区并通过 getField 方法等访问字段。您将需要 Proto-Descriptor 中的协议缓冲区(您可以使用 protoc 命令的 --descriptor_set_out= 参数来获取它)。
  • 如果您不优化速度,protoc 命令将生成使用反射的类。
于 2013-10-18T01:13:30.803 回答
-5

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

public static void main(String[] $)
{
    Class clazz = String.class;
    System.out.println(clazz.getName()); // "java.lang.String"
}
于 2013-10-18T00:20:21.360 回答