首页 > 解决方案 > 实例/对象内的数组:为什么这在 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};

这是为什么?为什么第一个不起作用?

标签: java

解决方案


如果护照中的字段没有改变,那么我建议在您的构造函数中设置护照

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

推荐阅读