![](/img/trans.png)
[英]Java - how to pass items from ArrayList in one class to constructor//getter and setter in another?
[英]How to pass a value from a constructor to a setter in another class in JAVA?
我现在在学校学习面向对象编程,有一些方面我还不太了解。 我有一个程序,用他们的名字和生日创建一个用户数据库。 所以我有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对象吗? 如果我不清楚我的问题,请让我知道,我想我可以清楚地表达我想要问的内容而不发布我的所有代码。
在你的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开始,这里有一个重要的概念,Encapsulation, 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
对象的引用 ,该对象将存储在内存中,直到没有引用为止。 这取决于你在哪里创建它们,尽管如此,还有Creational Patterns ,一个设计模式的家族,可以帮助你解决这个问题。
它是“日期”类型的出生日期吗?
如果是这样,您应该创建类Date的实例,执行您需要的控件并将其传递给persson实例中的出生日期的构造函数或setter。
Date birthDate = new Date(month, day, year);
// Some controls
people[choice-1].setBirthDate(birthDate);
Date the_birth_date = new Date(mounth, day, year);
people[choice - 1].setBirthDate(the_birth_date);
您可以这样设置: people[choice-1].setBirthday(new Date(month, day, year));
。 您必须先选择选择Person。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.