使用默认值初始化数组中的对象 - java
Initializing an object in an array with a default value - java
有没有办法为要初始化的数组中的对象定义默认值?
与在声明原始类型的数组时初始化原始类型的方式相同:
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())
(实际上只是创建一个对象并用指向它的指针填充数组),或者只是使用循环遍历数组并初始化每个单元格。
谢谢!
编辑:我意识到这不仅与数组相关,而且与声明一般对象并让它们默认为一个值/自动初始化有关。
执行此操作以便您可以在声明数组时对其进行初始化:
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)};
}
}
我没有看到 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)
在Java中,数组初始化为类型的默认值。例如,int 默认值为 0。对象数组的单元格的默认值为 null
,因为数组单元格仅保存对包含对象本身的内存槽的引用。默认引用指向 null
。为了用另一个默认值填充它,你必须像你提到的那样调用 Arrays.fill()。
Object[] arr=new Object[2];
Arrays.fill(arr, new Object());
据我所知,没有办法用普通的 java 做你想做的事(也就是说可能有一个我不知道的外部库)。
我会接受命中并遍历数组。这样的事情应该有效:
myObject[] array = new myObject[5];
for (int i = 0; i < array.length; i++) {
array[i] = new myObject();
}
您也可以使用 lambda 来缩短它,就像他的回答中提到的 。
Java8路:
MyObject[] arr = Stream.generate(() -> new MyObject())
.limit(5)
.toArray(MyObject[]::new);
这将创建供应商 () -> new MyObject()
生产的无限 Stream 个对象,将流限制为所需的总长度,并将其收集到一个数组中。
如果您想在对象上设置一些属性或其他东西,您可以让供应商参与更多:
() -> {
MyObject result = new MyObject();
result.setName("foo");
return result;
}
有没有办法为要初始化的数组中的对象定义默认值?
与在声明原始类型的数组时初始化原始类型的方式相同:
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())
(实际上只是创建一个对象并用指向它的指针填充数组),或者只是使用循环遍历数组并初始化每个单元格。
谢谢!
编辑:我意识到这不仅与数组相关,而且与声明一般对象并让它们默认为一个值/自动初始化有关。
执行此操作以便您可以在声明数组时对其进行初始化:
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)};
}
}
我没有看到 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)
在Java中,数组初始化为类型的默认值。例如,int 默认值为 0。对象数组的单元格的默认值为 null
,因为数组单元格仅保存对包含对象本身的内存槽的引用。默认引用指向 null
。为了用另一个默认值填充它,你必须像你提到的那样调用 Arrays.fill()。
Object[] arr=new Object[2];
Arrays.fill(arr, new Object());
据我所知,没有办法用普通的 java 做你想做的事(也就是说可能有一个我不知道的外部库)。
我会接受命中并遍历数组。这样的事情应该有效:
myObject[] array = new myObject[5];
for (int i = 0; i < array.length; i++) {
array[i] = new myObject();
}
您也可以使用 lambda 来缩短它,就像他的回答中提到的
Java8路:
MyObject[] arr = Stream.generate(() -> new MyObject())
.limit(5)
.toArray(MyObject[]::new);
这将创建供应商 () -> new MyObject()
生产的无限 Stream 个对象,将流限制为所需的总长度,并将其收集到一个数组中。
如果您想在对象上设置一些属性或其他东西,您可以让供应商参与更多:
() -> {
MyObject result = new MyObject();
result.setName("foo");
return result;
}