08
2020
08

protobuf为何不能修改字段

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());




输出结果为:


谢明媚

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。