Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用默认值初始化数组中的对象-java_Java_Arrays_Default Value - Fatal编程技术网

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

使用默认值初始化数组中的对象-java,java,arrays,default-value,Java,Arrays,Default Value,有没有办法为要初始化的数组中的对象定义默认值 与声明基元类型数组时初始化基元类型的方式相同: 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" 等等 我想声明一个我定义的类型的对象数组,并让它们以类似的方式自动初始化。 我想这意味着我想为数组中的每个索引

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

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

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"
等等

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

我在网上找不到任何相关的东西,最近的一次是在初始化数组(实际上只创建一个对象并用指向它的指针填充数组)后使用
Arrays.fill(myArray,new MyObject())
,或者只使用循环遍历数组并初始化每个单元格

谢谢大家!


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

这样做,您可以在声明数组时初始化数组:

int[] myIntArray =  {0, 0, 0,0,0};
char[] myCharArray = { 'x', 'p' };
你当然可以:

int[] myIntArray = new int[5]; 
在for循环中,将所有索引设置为初始值。。。但如果阵列更大,这可能需要一段时间

编辑: 对于自定义对象也是一样的,只需在init中使用匿名构造函数即可

例子:
我不认为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[]initialize(类aClass,int number)抛出IllegaccessException,实例化Exception{
对象[]结果=新对象[编号];
对于(int i=0;i

然后将其称为
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();
}
myObject[]数组=新的myObject[5];
for(int i=0;i
您也可以使用lambdas来缩短这个过程,就像他在回答中提到的那样。

Java 8方式:

MyObject[] arr = Stream.generate(() -> new MyObject())
    .limit(5)
    .toArray(MyObject[]::new);
这将创建由供应商生产的无限多个对象
()->new MyObject()
,将流限制在所需的总长度,并将其收集到一个数组中

如果您想在对象或其他对象上设置一些属性,您可以让一个更复杂的供应商:

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

这种行为在中有很好的定义。没有内置的解决方案,与Java在分配数组时为您归零的方式不同。一个相当好的解决方案是:
Stream.generate(()->new MyObject()).limit(5)。toArray(MyObject[]::new)
您能详细说明一下它的具体功能吗?谢谢@Cardano你应该回答这个问题。@Cardano使用Java 8的功能真是太棒了。我认为这不是他想要的。他说的是物体,我说的是物体。我给出了int和char数组作为基本类型的示例,这就是我想要对对象执行的操作。(我是一个女人,只是说:))哦,我现在明白了,请用SOFPointClass@HadasJacobi“他”一词很抱歉(见下表)谢谢,但正如我所提到的,正如我的测试所显示的,这会用指向同一个新对象的指针填充数组,这是没有用的(至少在本例中是这样…)好的,我得到了您需要的。。因此,在Java8中,循环或使用上面解释的流方式
() -> {
  MyObject result = new MyObject();
  result.setName("foo");
  return result;
}