2013-04-12 2 views
0

Я использую эти инструкции для метода: Конструктор, общедоступный ProgrammingTeam (ProgrammingTeam p), который принимает параметр программирования Team p как параметр и строит глубокую копию p. Не просто пишите встречает = p.meets ;. Чтобы сделать глубокую копию, вы должны вызвать конструктор копирования ArrayList: meet = new ArrayList() ;.Выполнение глубокой копии с использованием конструктора в Java

public ProgrammingTeam(ProgrammingTeam p) { 
    teamName = p.teamName; 
    teamMembers = new String [ p.teamMembers.length ]; 
    for (int i = p.teamMembers.length - 1; i >= 0; i--) { 

    } 
    meets = new ArrayList <Competition>(); 
} 

Я не могу точно определить, как я должен сочинять, а затем закончить глубокую копию. Я знаю, что понадобится цикл for, чтобы фактически копировать каждый объект, но я в недоумении, спасибо!

ответ

0

вам необходимо создать глубокую копию всех атрибутов параметра p-программирования ProgrammingTeam.

Вы можете сделать следующее:

for(int i = 0; i < p.teamMembers.length -1; i++){ 
     TeamMember teamMember = new TeamMember(); 
     // set attributes 
     teamMember.setAttribute1(p.teamMembers[i].getAttribute1()); 
     ... 
     teamMember.setAttributeN(p.teamMembers[i].getAttributeN()); 
     this.teamMembers[i] = teamMember; 
} 

Конечно, вы можете просто создать конструктор копирования для любой объекты удерживаются в списках, которые должны быть глубоко скопированы. Конструктор копирования по существу должен выполнить то же самое, что я описал в этом цикле.

0

Чтобы сделать глубокую копию String[] teamMembers использования java.util.Arrays.copyOf(teamMembers, teamMembers.length)

Что касается глубокой копии List<Competition> meets вы можете сделать это с new ArrayList<Competition>(meets), но это будет только хорошо, если конкуренция неизмененна

2

Что касается массива Струнного .. .

Строки являются неизменными, так что достаточно просто скопировать массив, например, с помощью метода Arrays.copyOf() утилиты:

teamMembers = Arrays.copyOf(p.teamMembers, p.teamMembers.length); 

Что касается списка, это зависит ...

Если Competition является immutable, используйте конструктор копирования ArrayList в:

meets = new ArrayList<Competition>(p.meets); 

Если Competition изменчиво, то необходимо вызвать его конструктор копирования (определяя его, если требуется).

meets = new ArrayList<Competition>(); 
for (Competition c : p.meets) { 
    meets.add(new Competition(c)); 
} 
+0

Я попробовал предложение teamMembers, но это не позволяет. Возможно, потому что фактическая переменная является частной String [] teamMembers ;? – user2272710

+0

Что значит «не разрешает»? Что такое сообщение об ошибке? – Bohemian

Смежные вопросы