java protobuf 的通用 getDefaultInstance()

Generic getDefaultInstance() for java protobuf

我正在尝试编写一个静态 util 函数,它接受一个 protobuf 对象并确定它是否是一个默认实例,类似于:

static boolean isDefault(ProtobufMessage m) {
  return m.equals(m.getDefaultInstance())
}

希望它能够应用于一系列 protobuf 对象,例如 Struct / Types / Messages,但是 getDefaultInstance() 似乎只在子 类.[=13 中定义=]

我正在考虑多态性或泛型,但不确定它是否可以应用于这种情况,有人知道吗?

这个问题有点晚了,但你可以使用 getDefaultInstanceForType(),它来自 MessageLiteOrBuilder class 并且不是静态的:

import com.google.protobuf.Message;
import java.util.Objects;

static boolean isDefault(Message m) {
  return Objects.equals(m.getDefaultInstanceForType(), m);
}

这是文档中的方法:https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/MessageLiteOrBuilder.html#getDefaultInstanceForType--