protoc-gen-java代码使用内联对象提示语法错误

时间:2017-11-07 03:25:59

标签: java go protocol-buffers protoc

描述

我想用java来调用golang grpc.I使用旧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文件。但是我发现使用Inline对象提示语法错误,问题来自:

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_;

}

有没有办法让这项工作?还是有什么想法?感谢

1 个答案:

答案 0 :(得分: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(),这个问题就解决了。