java - 在Java中: How do I create a class that can be initialized and call its methods in one statement?

标签 java oop

在使用 Google 服务库时,我在 Android 编程中经常看到一种编码风格,它们在初始化类的实例后使用点来调用方法。

例如,假设我有一个 Person 类:

public class Person {
    private String firstName;
    private String lastName;    
    private String occupation;
    private String primarySkill;
    private String secondarySkill;

/* ******************
 *   CONSTRUCTOR
 * ******************/
    public Person(String firstName, String lastName) {
        setFirstName(firstName);
        setLastName(lastName);
    }

/* ******************
 *     MUTATORS
 * ******************/
    // firstName Setter:
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    // lastName Setter:
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    // occupation Adder:
    public void addOccupation(String occupation) {
        this.occupation = occupation;
    }

    // primarySkill Adder:
    public void addPrimarySkill(String primarySkill) {
        this.primarySkill = primarySkill;
    }

    // secondarySkill Adder:
    public void addSecondarySkill(String secondarySkill) {
        this.secondarySkill = secondarySkill;
    }   
}

现在,当我创建此类的实例时,我希望能够执行以下操作:

Person bob = new Person("Bob", "Anderson")
            .addOccupation("Student")
            .addPrimarySkill("Java")
            .addSecondarySkill("SQL");

但是这给了我语法错误。我怎样才能构建一个可以让我做到这一点的类?

最佳答案

您正在寻找的称为方法链。修改您的 setter 以返回 this:

// occupation Adder:
public Person addOccupation(String occupation) {
    this.occupation = occupation;
    return this;
}

关于java - 在Java中: How do I create a class that can be initialized and call its methods in one statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078552/

相关文章:

PHP 用户类(登录/注销/注册)

python - 将类变量重定向到类函数

java - String.intern() 的返回解释

java - 从 JSONArray 获取字符串到 String[] 或 List<String> 以输入到 ArrayList

java - 如何从 jython 中的 java 类获取接口(interface)列表?

python - isinstance 在 python 中如何为子类工作?

oop - 如何检查一个对象是否是 Haxe 中给定类的后代?

java - 如何修复 native 查询 : it is showing syntax error near or at 中的错误

java - 我的自定义控件应该依赖于 Controller 类还是接口(interface)?

java - 将 Spring Security 与线程池结合使用会导致重用线程时出现竞争条件