Protobuf使用protoc生成的java类, 这个类一旦创建了对象,该对象就是只读的,不能修改它的任何属性,也就是说这个类是只读类。Protobuf使用builder来构建对象,构建过程中为设置对象属性值,设置完后,builder本次任务已经完结了。
据下面的例子来说明一下:
用户类:
public class User {
private String userName;
private int age;
public boolean hasUserName(){
...
}
public boolean hasAge(){
...
}
public String getUserName(){
return userName
}
public int getAge(){
return age;
}
public static Builder newBuilder() {
return new Builder();
}
}
静态内部类,使用User内部类来修改User的字段,而外部其他类没权限直接修改User的字段:
public static class User.Builder {
private String _userName;
private int _age;
public String getUserName(){
return _userName
}
public int getAge(){
return _age;
}
public User.Builder setUserName(String userName){
this._userName = userName;
return this;
}
public User.Builder setAge(int age){
this._age = age;
return this;
}
public User build() {
User user = new User();
user.userName = this._userName;
user.age = this._age;
//清除所有字段
this._userName = null;
this._age = 0;
return user;
}
}
使用这两个类:
User.Builder builder = User.newBuilder();
builder.setUserName(“谢明媚").setAge(24);
User user = builder.build();
builder.setUserName("谢铭");
System.out.println(user.getUserName());
输出结果为:
谢明媚