You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java这种语法格式是否正常?Protocol Buffers教程代码疑问

这种Java链式调用语法完全正常,而且非常实用!

别担心,你看到的这种写法是Java里很常见的链式调用(Method Chaining),尤其是在像Protocol Buffers这类使用Builder模式的场景里,几乎是标准写法。我来帮你拆解清楚:

核心原理:每个方法都返回对象本身

你疑惑的.setId()、.setName()这些方法,它们的返回值并不是void——而是返回当前正在操作的Person.Builder对象本身。这样你就可以在调用完一个方法后,直接接着调用下一个方法,不用每次都把builder赋值给变量再操作。

一步步拆解你的代码

  1. Person.newBuilder():这一步会创建并返回一个可变的Person.Builder实例,Protocol Buffers用这个Builder来构建最终不可变的Person对象。
  2. .setId(1234):调用Builder的setId方法,设置id字段,然后返回这个Builder自己。
  3. .setName("John Doe"):接着用同一个Builder对象调用setName,设置名字后依然返回自己。
  4. 嵌套的.addPhones(...):这里同样是调用Builder的addPhones方法,传入一个构建好的PhoneNumber实例,返回的还是原来的Person.Builder。
  5. .build():最后调用build()方法,这个方法会把Builder里的所有字段组装成一个不可变的Person实例,赋值给john变量。

给你模拟个简化版Builder实现,更容易理解

如果自己写个类似的Builder类,逻辑大概是这样:

public class Person {
    // 不可变的Person实例字段
    private final int id;
    private final String name;
    private final String email;

    // 私有构造方法,只能通过Builder创建
    private Person(Builder builder) {
        this.id = builder.id;
        this.name = builder.name;
        this.email = builder.email;
    }

    // 创建Builder的入口方法
    public static Builder newBuilder() {
        return new Builder();
    }

    // 内部Builder类,负责构建Person
    public static class Builder {
        private int id;
        private String name;
        private String email;

        // 每个set方法都返回this,实现链式调用
        public Builder setId(int id) {
            this.id = id;
            return this;
        }

        public Builder setName(String name) {
            this.name = name;
            return this;
        }

        public Builder setEmail(String email) {
            this.email = email;
            return this;
        }

        // 最终构建不可变的Person实例
        public Person build() {
            return new Person(this);
        }
    }
}

看,每个setXxx方法都返回this(当前Builder对象),这就是链式调用的核心。

这种写法的好处是代码更紧凑、可读性更强,尤其是在构建有大量字段的对象时,比写一堆单独的赋值语句清爽多了——Protocol Buffers正是看中了这一点,所以自动生成的Builder类都采用了这种设计。

内容的提问来源于stack exchange,提问作者user8897013

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:25:27