Class Person{
String name;
int phone;
Date meeting;
public Person(String name, int phone, Date meeting){
this.name = name;
this.phone = phone;
this.meeting = meeting;
}
person类使用date类作为数据类型
Class Date{
int day;
int month;
int year;
public Date(int day, int month, int year){
this.day = day;
this.month = month;
this.year = year;
}
我想创建一个值为name、phone和meetingdate的对象(一个人),例如:
Class TestPerson{
# Example 1#
Date Johnsmeeting = new Date(1,1,2021);
Person John = new Person("John",12345678, Johnsmeeting);
# Example 2#
Person John = new Person("John",12345678, new Date(1,1,2021));
我需要为日期创建一个额外的对象吗?有没有更好的编码方法?
1条答案
按热度按时间kpbwa7wx1#
您的代码在示例化
Date
要传递给的构造函数的Person
.你的例子1和2都是正确有效的。有一个区别是,在示例1中,您保留了对
Date
类,如果该类是可变的,那么进一步说,任何使该对象发生变化的代码都会发生同样的变化Date
对象引用的Person
对象。中的代码Person
可能会惊讶地看到日期的值毫无理由地改变。有几个方法可以解决这个问题,包括:(a)使你的Date
类完全不可变,(b)传递对象的副本/克隆,或(c)使用示例#2语法避免无意中与其他地方使用的对象发生冲突。您的代码也在示例化另一个对象。文字
"John"
是用于示例化String
对象。我不知道这个过程有什么困扰你。也许你可以修改你的问题来解释你理解中的摩擦点。
顺便说一下,你的代码还有其他问题。
不要自己发明
Date
班级。java在java.time类中提供了业界领先的日期时间框架。使用LocalDate
为了你的目的。time类使用工厂方法,而不是new
施工人员。…或使用月份的枚举对象。
遵循java约定使代码更易于阅读。类名以首字母cap开头,变量名不以首字母cap开头。两者都使用camel case。所以呢
Johnsmeeting
应该是johnMeeting
.数字类型,例如
int
通常不用于电话号码。电话号码在现实世界中很复杂,可能涉及各个部分,也可能涉及文本。此外,数字表示数量或位置(序数或索引)。电话号码两者都不是。Java16将带来新的记录功能。这是一种新的简化方法,用于定义一个主要是关于不可变地承载数据的类。编译器隐式地编写构造函数getters,
equals
&hashCode
,和toString
. 你的Person
可能适合作为记录来写。这是你的全部
Person
作为记录上课。