0

描述

我想用java调用golang grpc.我用旧的golang的consumer_proto.proto来生成java代码

过程

protoc  --java_out=/home/xxx/src/main/java custom_proto.proto  

protoc --plugin=protoc-gen-grpc-java=/home/xxx/protoc-gen-grpc-java-1.7.0-linux-x86_64.exe --grpc-java_out=/home/xxx/main/java custom_proto.proto

结果

我成功生成了我的 proto java 文件。但我发现使用内联对象提示语法错误,问题来自:

message RepGetClassBySchoolD {
     RequestRClassStruct     Class = 1;
}

错误是:

getClass() in xx classes in 'java.lang.Object';attempting to use incompatible return type

当我运行代码时,错误是:

Error:(92, 62) java: com.xxx.RepGetClassBySchoolD getClass() Unable to cover java.lang.Object's getClass()

要覆盖的方法是最终的

它发生在 RepGetClassBySchoolD 类:

public com.class100.service.usercenter.RequestRClassStruct getClass() {
return class_ == null ? com.class100.service.usercenter.RequestRClassStruct.getDefaultInstance() : class_;

}

有没有办法使这项工作?或者有什么想法?谢谢

4

1 回答 1

0

我解决了这个问题。通过以下方式修复它:

原因:

message CascadeStuGRPC {
    RequestRStudentStruct requestRStudentStruct =1 ;
    RequestRTeachingAssistantStruct requestRTeachingAssistantStruct = 2;
    RequestRSchoolStruct    SchoolLogin = 3;
    RequestRClassStruct     Class = 4;
}

message RepGetClassBySchoolD {
    RequestRClassStruct    Class = 1;
}

只是因为我定义了两个通用名称为“Class”的消息,我在golang中用了很久,不会出错,但是在proto-gen-jave中,会产生这个错误。

使固定:

只需用这样的另一个名称修复它:

message CascadeStuGRPC {
    RequestRStudentStruct requestRStudentStruct =1 ;
    RequestRTeachingAssistantStruct requestRTeachingAssistantStruct = 2;
    RequestRSchoolStruct    SchoolLogin = 3;
    RequestRClassStruct     ClassCa = 4;
}

message RepGetClassBySchoolD {
    RequestRClassStruct    ClassSch = 1;
}

它像这样生成:

 public com.class100.service.usercenter.RequestRClassStruct getClassCa() {
return classCa_ == null ? com.class100.service.usercenter.RequestRClassStruct.getDefaultInstance() : classCa_;}

它生成getClassCa()而不是getClass(),这个问题就解决了。

于 2017-11-07T03:56:26.160 回答