protocol buffer 的 compile java class 有编译时错误

compile java class of protocol buffer has compile time error

我正在使用协议缓冲区 2.6.1 和 Java 1.7.0.71。

并编译了简单的测试协议缓冲区文件。

option java_package = "my.sample";
option java_outer_classname = "Sum";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
option optimize_for = SPEED;
message SumRequest {
    required string family = 1;
    required string column = 2;
} 

message SumResponse {
   required int64 sum = 1 [default = 0];
}

service SumService {
  rpc getSum(SumRequest)
    returns (SumResponse);
}

但在下面的代码中,没有声明 memoizedHashCode,因此会抛出编译错误。

@java.lang.Override
public int hashCode() {
  if (memoizedHashCode != 0) {
    return memoizedHashCode;
  }
  int hash = 41;
  hash = (19 * hash) + getDescriptorForType().hashCode();
  if (hasFamily()) {
    hash = (37 * hash) + FAMILY_FIELD_NUMBER;
    hash = (53 * hash) + getFamily().hashCode();
  }
  if (hasColumn()) {
    hash = (37 * hash) + COLUMN_FIELD_NUMBER;
    hash = (53 * hash) + getColumn().hashCode();
  }
  hash = (29 * hash) + getUnknownFields().hashCode();
  memoizedHashCode = hash;
  return hash;
}

我在网上看到添加

private int memoizedHashCode = 0

解决了问题,但我认为这只是解决方法。

为什么会这样?

memoizedHashCode 在基础 class AbstractMessageLite 中定义,它是 protobuf 库的一部分。

您需要确保用于生成代码的 protoc 版本与您引入程序的 libprotobuf.jar 版本完全匹配。如果版本不匹配,您可以看到您描述的错误以及其他错误。