java - JAVA 如何将构造函数中的值传递给另一个类中的 setter?

标签 java class oop constructor

我现在正在学校学习面向对象编程,但其中有些方面我还不太了解。我有一个程序可以创建一个包含用户姓名和生日的数据库。所以我有 3 个类:person、PersonProgram(主要)和 Date。 Person 类具有用于姓名和出生日期的构造函数、setter 和 getter。 Date 类对正确的日期和闰年等进行错误检查。在主程序中,我创建了 5 个人,然后提供菜单选项来更改和修改名称和日期。因此,例如,如果用户想要更改名称,我的代码如下所示:

System.out.println("Enter new first name:");
people[choice-1].setFirstName(input.next());

这对我来说很有效并且很有意义。但我想知道如何正确更改日期? Date 构造函数采用 3 个整数表示日、年和月,因此在主程序中我提示用户输入存储在日、月、年整数中的 3 个新日期。所以我的理解是从那里我会将这 3 个整数传递给 Date 构造函数:

new Date(month, day, year);

我感到困惑的是从那里去哪里。 Date 构造函数获取新的 Date 调用,并将其传递给 setter。如何将这个新创建的日期对象传回Person程序,让Person中的生日setter更新对应的Person对象呢?如果我不清楚我的问题,请告诉我,我想我可以在不发布所有代码的情况下阐明我想问的问题。

最佳答案

在你的 Person 类中你应该有这样的东西:

public class Person {

    private Date birthDate;

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate){
        this.birthDate = birthDate;
    }
}

然后您可以像这样设置 birthDate:

person[choice-1].setBirthDate(new Date(month,day,year));

考虑到您是从 OOP 开始的,这里有一个重要的概念,封装,Person 类限制对其字段的自由访问,例如 birthDate,并设置与他们交互的规则。例如,您可以在分配日期之前检查日期是否为空。

public void setBirthDate(Date birthDate){
    if(birthDate != null) {
        this.birthDate = birthDate;
    } else {
        //Whatever you wanna do here (throw an Exception, etc, etc)
    }
}

评论问题

尽管提出另一个问题会更好:

Do I have to create an instance of the Date class in my Person class? Or anywhere for that matter?

不,属性/字段 birthDate 是对 Date 对象的引用,该对象将存储在内存中,直到没有引用为止。在何处创建它们取决于您,尽管如此,创建模式,一个设计模式家族,可以帮助您解决这个问题。

关于java - JAVA 如何将构造函数中的值传递给另一个类中的 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685718/

相关文章:

java - 使用 OpenCV 中的 Blob 检测进行皮肤毛孔分析

java - secret 可以隐藏在提供访问凭证的 'safe' java 类中吗?

ios - 是否有 "Size Classes"的纯代码版本?

java - 类型 A 和 B 之间的循环依赖

java - 如何在应用程序更新中实现 "IMMEDIATE"?

java - 打印形成

java - 如何使用 JSch 在服务器上使用别名?

java - 如何获取List的类变量

php - 如何在 PHP 中动态实例化一个对象?

python - 如何在 Python 中从类对象创建新实例