编译java类的协议缓冲区有编译时错误

时间:2015-05-12 01:46:59

标签: protocol-buffers

我使用协议缓冲区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

解决了这个问题,但我想这只是解决方法。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

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

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

相关问题