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

时间:2017-01-16 22:01:20

标签: java class oop constructor

我现在正在学校学习面向对象的编程,有一些方面我还不太了解。我有一个程序,用他们的名字和生日创建一个用户数据库。所以我有3个类:person,PersonProgram(主要)和Date。 Person类具有名称和出生日期的构造函数,设置器和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对象吗?如果我不清楚我的问题请告诉我,我想我可以在不发布所有代码的情况下明确表达我想要的内容。

4 个答案:

答案 0 :(得分:1)

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)
    }
}

评论问题

虽然最好再创建一个问题

  

我是否必须在Person类中创建Date类的实例?或者在任何地方?

不,属性/字段birthDate引用Date对象,它将存储在内存中,直到没有引用为止。这取决于你在哪里创建它们,但仍然有创建模式,一个设计模式的家族,可以帮助你解决这个问题。

答案 1 :(得分:0)

是类型'日期'?

的出生日期

如果是这样,你应该创建你的类Date的实例,做你需要的控件并将它传递给persson实例中的出生日期的构造函数或setter。

Date birthDate = new Date(month, day, year);
// Some controls
people[choice-1].setBirthDate(birthDate);

答案 2 :(得分:0)

Date the_birth_date = new Date(mounth, day, year);
people[choice - 1].setBirthDate(the_birth_date);

答案 3 :(得分:0)

您可以这样设置:people[choice-1].setBirthday(new Date(month, day, year));。您必须先选择选择Person。