[英]An easier way of setting nested properties values in Grpc generated java code
我們將 Grpc 與 java 應用程序一起使用,並且我們在 protobuff 中定義了一個嵌套的 object。
原型示例:
message Person {
string name = 1;
Child child = 2;
}
message Child {
string name = 1;
Hobby hobbies = 2;
}
message Hobby {
string name = 1;
string reason = 2;
}
當我想更新孩子愛好的原因時,我必須執行以下操作:
person.toBuilder()
.setChild(
person.getChild.toBuilder()
.setHobby(
person.getChild().getHobby().toBuilder()
.setReason("new reason")
.build()
)
.build()
)
.build()
上面的代碼不是最好的,我的問題是是否有更好的方法來完成同樣的事情?
TL;博士
Person.Builder builder = person.toBuilder();
builder.getChildBuilder().getHobbyBuilder().setReason("new reason");
Person personWithUpdatedReason = builder.build();
細節:更好的方式是主觀的,你有什么期望? 我相信,大致如下:
person.getChild().getHobby().setReason("new reason");
如果是這種情況,您會希望 object 是可變的,這取決於上下文,可能不是一件好事。
另一個例子:
Hobby newHobby = person.getChild().getHobby().toBuilder().setReason("new reason").build();
Child newChild = person.getChild().toBuilder().setHobby(newHobby).toBuild();
Person newPerson = person.toBuilder().setChild(newChild).toBuild();
return newPerson;
如果您不喜歡您的代碼具有多級嵌套,這會更好。
不幸的是,我認為我沒有幫助您,而是很想知道您/其他人對此的看法。
我對此進行了更多閱讀,官方文檔確實提出了更好的方法: https://developers.google.com/protocol-buffers/docs/reference/java-generated?csw=1#sub-builders
因此,您可以編寫如下代碼:
Person.Builder builder = person.toBuilder();
builder.getChildBuilder().getHobbyBuilder().setReason("new reason");
Person personWithUpdatedReason = builder.build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.