在java中创建类为数据类型的对象

dzjeubhm  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(319)
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));

我需要为日期创建一个额外的对象吗?有没有更好的编码方法?

kpbwa7wx

kpbwa7wx1#

您的代码在示例化 Date 要传递给的构造函数的 Person .
你的例子1和2都是正确有效的。有一个区别是,在示例1中,您保留了对 Date 类,如果该类是可变的,那么进一步说,任何使该对象发生变化的代码都会发生同样的变化 Date 对象引用的 Person 对象。中的代码 Person 可能会惊讶地看到日期的值毫无理由地改变。有几个方法可以解决这个问题,包括:(a)使你的 Date 类完全不可变,(b)传递对象的副本/克隆,或(c)使用示例#2语法避免无意中与其他地方使用的对象发生冲突。
您的代码也在示例化另一个对象。文字 "John" 是用于示例化 String 对象。
我不知道这个过程有什么困扰你。也许你可以修改你的问题来解释你理解中的摩擦点。
顺便说一下,你的代码还有其他问题。
不要自己发明 Date 班级。java在java.time类中提供了业界领先的日期时间框架。使用 LocalDate 为了你的目的。time类使用工厂方法,而不是 new 施工人员。

LocalDate ld = LocalDate.of( 2021 , 1 , 23 ) ;

…或使用月份的枚举对象。

LocalDate ld = LocalDate.of( 2021 , Month.JANUARY , 23 ) ;

遵循java约定使代码更易于阅读。类名以首字母cap开头,变量名不以首字母cap开头。两者都使用camel case。所以呢 Johnsmeeting 应该是 johnMeeting .
数字类型,例如 int 通常不用于电话号码。电话号码在现实世界中很复杂,可能涉及各个部分,也可能涉及文本。此外,数字表示数量或位置(序数或索引)。电话号码两者都不是。
Java16将带来新的记录功能。这是一种新的简化方法,用于定义一个主要是关于不可变地承载数据的类。编译器隐式地编写构造函数getters, equals & hashCode ,和 toString . 你的 Person 可能适合作为记录来写。
这是你的全部 Person 作为记录上课。

public record Person( String name , String phone , LocalDate meeting ) 
{
}

相关问题