Any

注:内容翻译自官网参考文档中 Java Generated Code 的 Any 一节。

假设有一个类似这样的Any字段:

  1. import "google/protobuf/any.proto";
  2. message ErrorStatus {
  3. string message = 1;
  4. google.protobuf.Any details = 2;
  5. }

在我们生成的代码中,details字段的getter返回一个com.google.protobuf.Any的实例。这提供下面特殊方法来打包和拆包Any的值:

  1. class Any {
  2. // 打包给定的消息到一个Any中,使用默认类型URL前缀 “type.googleapis.com”.
  3. public static Any pack(Message message);
  4. // 打包给定消息到一个Any中,使用给定类型URl前缀
  5. public static Any pack(Message message,
  6. String typeUrlPrefix);
  7. // 检查这个Any消息的负载(payload)是不是给定的类型
  8. public <T extends Message> boolean is(class<T> clazz);
  9. // 解包Any到给定的消息类型。如果类型不匹配或者解析负载失败则抛出异常
  10. public <T extends Message> T unpack(class<T> clazz)
  11. throws InvalidProtocolBufferException;
  12. }