我是协议缓冲区和探索反射方法的新手。我看到一个方法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"
}