gpt4 book ai didi

java - 在 Java 中初始化对象数组/vector 的最简单方法

转载 作者:行者123 更新时间:2023-11-30 06:19:37 24 4
gpt4 key购买 nike

在 Java 中创建指定大小的数组/列表/vector 的最简单方法是什么,其中填充了使用默认构造函数创建的类的实例(我希望这个术语也用于 C++ 之外?)。我想让代码更具可读性并降低 NullPointerException 的风险。

(例如,ArrayList 构造函数有一个参数为容量而非大小的构造函数..)

下面是试图在代码中实现的内容。这是您的典型方法。 (也可以用 Vector 或 ArrayList 来完成)

// Typical, I don't want this
class SomeSimpleClass {

DataClass[] data = new DataClass[10];

SomeSimpleClass() {
// I don't want this..
for(int i = 0; i < 10; i++) data[i] = new DataClass();
}

void doSomething() {
data[5].doSomething();
}

}

// What I want
class SomeSimpleClass

// now I have ten data objects, ready to be used...
Holder<DataClass> data = new Holder<DataClass>(10);

void doSomething() {
data.get(5).doSomething();
}

}

我发现我的很多类都需要一些较小的数据保存类的实例。上面的例子很简单,但是当类变得更复杂时,它可能会很麻烦。

这里最好的方法是什么?有没有像上面那样工作的持有人类? ArrayList(或类似类)是否有如下函数?

ArrayList<DataClass> data = new ArrayList<DataClass>().addNewObjects(10);

最佳答案

从 Java 8 开始你可以使用类似的东西

Stream.generate(DataClass::new).limit(10).toArray(DataClass[]::new);

可是我没看到

DataClass[] data = new DataClass[10];
for(int i = 0; i < data.length; i++) data[i] = new DataClass();

作为糟糕的方法。

你也可以使用Arrays.setAll

DataClass[] data = new DataClass[10];
Arrays.setAll(data, i -> new DataClass());

顺便说一句,如果您不需要同步方法,则不要使用 Vector,而是使用 List,例如 ArrayList

创建 DataClass 元素的 ArrayList 的 Java 8 代码看起来像

Stream.generate(DataClass::new).limit(10).collect(Collectors.toList());

如果您确实需要 Vector,则只需使用返回的列表并将其传递给 Vector 构造函数。

关于java - 在 Java 中初始化对象数组/vector 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22913851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com