简单的使用protobuf及使用过程中遇到的问题

如下,我准备的协议文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13

// 协议的版本
syntax = "proto3";

// 生成的外部类名,同时也是文件名
option java_outer_classname = "StudentPOJO";

// 会在StudentPOJO外部类生成一个内部类Student,他是真正发送的POJO对象
message Student {
    int32 id = 1;
    string name = 2;
}

我用如下的指令生成Java文件(我已经为protobuf配置了环境变量):

1
2
3

protoc --java_out . student.proto

遇到的问题

生成的java代码中如下处会报红,报红的原因是找不到UnusedPrivateParameter类:

1
2
3
4
5
6
7

@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
    return new DeleteRequest();
}

我解决这个问题的方法是,修改protobuf的依赖为3.17.3,和我的编译工具一致。

但是我没有简单的放下这个问题,我很好奇,为什么我的代码中并不存在UnusedPrivateParameter类的定义,而且生成的代码中也没有任何包的引入,为什么就可以使用这个类呢(因为我一度怀疑是我的工具配置错了,所以出现了这个类)。

我在检查生成的字节码时,发现导入该包的代码又出现了,我是不是可以理解有个什么类似Lombok的工具,可以在编译期自动帮我编译一些代码:

2021-07-27-20-54-19

后续:
额,UnusedPrivateParameter其实是其父类的一个静态内部类~