java - 实例/对象内的数组:为什么这在 java 上不起作用?
问题描述
我在做一些java练习,我需要创建一个里面有一个数组的对象。该数组使用对象本身的变量,如下所示:
public class Persons {
String name;
String nationality;
String dateOfBirth;
String[] passport={name, nationality, dateOfBirth};
int seatNumber;
}
但主要是在尝试打印 Persons.passport 时,无论如何,所有三个字段都为空。相反,对象需要像这样:
public class Persons {
String name;
String nationality;
String dateOfBirth;
String[] passport;
int seatNumber;
}
主要是我们需要像这样分配护照:person.passport= new String[]{person.name, person.nationality, person.dateOfBirth};
这是为什么?为什么第一个不起作用?
解决方案
如果护照中的字段没有改变,那么我建议在您的构造函数中设置护照
public class Persons {
String name;
String nationality;
String dateOfBirth;
String[] passport;
int seatNumber;
public Persons(String name, String nationality, String dateOfBirth) {
this.name = name;
this.nationality = nationality;
this.dateOfBirth = dateOfBirth;
passport = new String[] {name, nationality, dateOfBirth};
}
}
但是,如果您打算改变这些字段的值,那么您应该完全摆脱护照字段,并使用一个 getter 方法在您请求时构建数组。
这种技术也更安全一些,因为它可以防止其他类改变 Persons 对象拥有的数组。
public class Persons {
String name;
String nationality;
String dateOfBirth;
int seatNumber;
public Persons(String name, String nationality, String dateOfBirth) {
this.name = name;
this.nationality = nationality;
this.dateOfBirth = dateOfBirth;
}
public String[] getPassport() {
return new String[] {name, nationality, dateOfBirth};
}
}
推荐阅读
- python - 如何使用 python 从 Postgres 模式中导入所有表
- selenium - 在现有范围报告中添加新行
- java - JavaFX如何使用线程检查互联网连接
- mysql - 在 where 子句中带有 case 语句的 laravel 查询在条件后附加 IS NULL
- angular - 如何在 Ionic 3 中使用手风琴打开此表单?
- python - 替换 Pandas 数据框中的 **NULL** 值
- java - 转换地图
> 到地图 >> 使用 Java 流 API - android - Firebase Crashlytics - 广告 ID 的使用
- c++ - 调用自动构造函数:为什么我的类型不完整?
- java - 你能制作组合框方法吗