我想用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_;
}
有没有办法让这项工作?还是有什么想法?感谢
答案 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(),这个问题就解决了。