使用默认值初始化数组中的对象 - java

问题描述 投票:0回答:6

有没有办法为要初始化的数组中的对象定义默认值?

与声明基本类型数组时初始化基本类型的方式相同:

int[] myIntArray = new int[5]; // we now have an array of 5 zeroes
char[] myCharArray = new char[2]; // an array in which all members are "\u0000"

等等

我想声明一个我定义的类型的对象数组,并让它们以类似的方式自动初始化。 我想这意味着我想为数组中的每个索引运行

new myObject()
(使用默认构造函数)。

我在网上找不到任何相关内容,我得到的最接近的是在初始化数组后使用

Arrays.fill(myArray, new MyObject())
(实际上只是创建一个对象并用指向它的指针填充数组),或者只是使用循环遍历数组并初始化每个单元格。

谢谢你!

编辑:我意识到这不仅与数组相关,而且与声明一般对象并使它们默认为一个值/自动初始化有关。

java arrays default-value
6个回答
9
投票

Java 8 方式:

MyObject[] arr = Stream.generate(() -> new MyObject())
    .limit(5)
    .toArray(MyObject[]::new);

这将创建供应商() -> new MyObject()生产的无限对象

Stream
,将流限制为所需的总长度,并将其收集到一个数组中。

如果你想在对象上设置一些属性或其他东西,你可以有一个更参与的供应商:

() -> {
  MyObject result = new MyObject();
  result.setName("foo");
  return result;
}

1
投票

执行此操作,以便您可以在声明数组时对其进行初始化:

int[] myIntArray =  {0, 0, 0,0,0};
char[] myCharArray = { 'x', 'p' };

你当然可以这样做:

int[] myIntArray = new int[5]; 

并且在 for 循环中将所有索引设置为初始值...但是如果数组更大,这可能需要一段时间...

编辑:

对于自定义对象是一样的,只是在 init 中使用匿名构造函数

示例:

public class SOFPointClass {

private int x;
private int y;

    public SOFPointClass(int x, int y) {
    this.x = x;
    this.y = y;
}

    // test
    public static void main(String[] args) {
        SOFPointClass[] pointsArray = { new SOFPointClass(0,0) ,  new SOFPointClass(1,1)};
    }
}

0
投票

我没有看到 Java 提供的方法可以做到这一点。

我的建议是定义一个函数来完成它。

Object[] initialize(Class aClass, int number) throws IllegalAccessException, InstantiationException {
    Object[] result = new Object[number];
    for (int i = 0; i < number; ++i) {
        result[i] = aClass.newInstance();
    }
}

然后称其为

Object[] arr = initialize(YourClass.class, 10)


0
投票

在Java中,数组是用类型的默认值初始化的。例如,int 默认值为 0。对象数组单元格的默认值为

null
,因为数组单元格仅保存对包含对象本身的内存槽的引用。默认参考点为
null
。为了用另一个默认值填充它,你必须像你提到的那样调用 Arrays.fill() 。

Object[] arr=new Object[2];
Arrays.fill(arr, new Object());

0
投票

据我所知,没有办法只用普通的java来做你想做的事情(也就是说可能有一个我不知道的外部库)。

我会在数组上进行点击和循环。像这样的东西应该有效:

myObject[] array = new myObject[5];

for (int i = 0; i < array.length; i++) {
    array[i] = new myObject();
}

你也可以使用 lambda 来缩短它,就像他的答案中提到的 Cardano


0
投票

从 Java 8 开始您可以使用

Arrays.setAll

var arr = new MyObject[5];
Arrays.setAll(arr, i -> new MyObject());
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.