2016-04-20 5 views
3

Когда я создаю массив объектов, как добавить аргумент для конструктора внутри каждого объекта? Например:Конструкторы при создании массива объектов

foos = new Foo[10]; 

Как создать 10 объектов со своими конструкторами? Я не понимаю, где я могу поместить аргументы, которые передаются конструкторам каждого объекта?

+2

вы только что определили массив, теперь вам нужно петля над ней и инициализируйте каждый элемент как 'foos [i] = new Foo (...)'. – SomeJavaGuy

ответ

5
foos = new Foo[10]; 

создает массив, который может содержать ссылки на 10 Foo экземпляров. Однако все ссылки инициализируются нулем.

Вы должны вызвать конструктор для каждого элемента массива отдельно, в какой момент вы можете указать любой аргумент вы хотите:

foos[0] = new Foo (...whatever arguments the constructor requires...); 
... 
2
foos = new Foo[10]; 

Это создает тип массива Foo, это не создает объект

для инициализации сделать следующее:

for(int i=0;i<foos.length; i++){ 
    foos[i] = new Foo (your-argument); 
} 

См. Arrays для получения более подробной информации.

3

Это всего лишь выделение для нового объекта массива типа Foo для хранения нескольких элементов. Для того, чтобы создать и сохранить реальный объект вы будете делать что-то вроде этого:

foos[0]=new Foo(); //Call constructor here 
. 
. 
. 
foos[10]= new Foo(); //Call constructor here 
0

Так что для того, чтобы создать «10» новые объекты, которые нужно создать массив для хранения объектов, а затем цикл по списку, добавляя новый объект для каждого индекса массива.

int foosSize = 10; 
Foo[] foos = new foos[foosSize]; 

for(int i = 0; i < foosSize; i++) { 
    foos[i] = new Foo(); 
} 

это создаст новый объект foo и добавит его в индекс в созданном массиве.

2

Вы можете сделать это рядный так:

Foo[] foos = new Foo[] { 
        new Foo(1), 
        new Foo(2), 
        new Foo(10) 
       }; 

Или вот так:

Foo[] foos = { 
       new Foo(1), 
       new Foo(2), 
       new Foo(10) 
      }; 
1

давайте говорить, что Foo принять строку в качестве аргумента, так что конструктор Foo что-то вроде этого:

public Foo(String arg){ 
this.arg = arg; 
} 

Если аргументы, которые необходимо передать конструкторам, отличаются друг от друга, поэтому вам нужно будет использовать sep инициализация arate для каждого элемента. как сказал @Sanjeev, но с передачей аргумента.

foos[0]=new Foo(argOne); 
. 
. 
foos[10]= new Foo(argTen); 

с другой стороны, если ваши аргументы связаны с индексом массива, вы должны использовать цикл, как @Sumit упоминалось

for(int i=0;i<foos.length; i++){ 
    foos[i] = new Foo (arg + i); 
} 
Смежные вопросы