当前位置: 首页 > 知识库问答 >
问题:

在Java中:如何创建一个可以初始化并在一条语句中调用其方法的类?[副本]

弘伟彦
2023-03-14

当使用谷歌服务库时,我在Android编程中看到了一种编码风格,在初始化类实例后使用dots调用方法。

例如,假设我有一个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");

然而,这给了我语法错误。我如何构建一个类来实现这一点?

共有3个答案

陈鸿才
2023-03-14

这是使用生成器模式的典型案例。生成器模式中的setter返回

海保臣
2023-03-14

您应该有“setter”方法返回对象的类型。要在addXyx方法的基础上构建:

public Person setLastName(String lastName) {
    this.lastName = lastName;
    return this;
}

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

public Person addPrimarySkill(String primarySkill) {
    this.primarySkill = primarySkill;
    return this;
}

public Person addSecondarySkill(String secondarySkill) {
    this.secondarySkill = secondarySkill;
    return this;
} 

这样,您就可以链接setter调用:

Person bob = new Person("Bob", "Anderson")
        .addOccupation("Student")
        .addPrimarySkill("Java")
        .addSecondarySkill("SQL");
徐飞龙
2023-03-14

你要找的是所谓的方法链接。修改设置器以返回此:

// occupation Adder:
public Person addOccupation(String occupation) {
    this.occupation = occupation;
    return this;
}
 类似资料:
  • 在正方形应该移动的地方初始化。KeyListener继承自GameAssistant(JFrame是用KeyListener创建的) }

  • 据我所知,在Java11中,这两个操作可以在一行中完成,不是吗?

  • 问题内容: 假设我有类,并且其中的类具有可读和可写的属性: 是否可以只使用该方法而只使用该方法? 问题答案: 不可以,无法分配每个类别的访问权限。 考虑将您的类分为单独的接口,以便每个类仅获得一个具有所需接口的对象。例如: 当然,这涉及安全性,但这应该使您朝正确的方向进行思考。

  • 这是我想用typescript中的mocha chai测试框架测试的类。我用ts mockito来模仿。 ClassAResource类看起来像这样, 在我的测试中,我试图模仿ClassAResource的getJob方法,如下所示, 我这样调用ClassA cancel方法, 我希望取消方法中的getJobs调用被模拟并返回一个作业对象。 但是这次考试并没有按照我的预期进行。Mock不会出现在图

  • 问题内容: 用Java开发一个简单的井字游戏。 我有一个名为的课程。此类应包含有用的游戏方法。游戏发生在另一个班级。 中的方法是。该方法应该将所有9个按钮(井字游戏板)上的文本设置为空白,再次将它们设置为启用,然后将变量设置为1。 这是它的代码: 是游戏主类中的JButtons数组。 该方法以前在游戏的主要类中使用。但是现在它在不同的类中,它无法到达该类中的按钮并对其进行操作。 我在中创建了get

  • 我是一名It专业的一年级学生。我们的任务是为最终项目的支付系统创建一个概念方案。我们决定做一个工资项目。下面是我使用JOptionFrame和JOptionPane的代码片段 由于分配给工资变量的数字取决于工作职位,为了计算准确,我必须从if语句中调用它。有人有解决方案吗?