클래스 Book
에 많은 Authors
을 가질 수 있습니다. 클래스 Author
클래스의 몇 가지 객체를 Book
클래스의 생성자에 전달한 다음이 객체를 Arrays.copyOF
으로 복사하지만 객체 외부의 Author
데이터가 변경되면 모든 부분이 변경되어 복사본이 만들어지지 않았 음을 의미합니다.`어레이, copyOf`는 객체의 딥 복사를 수행하지 않았습니다.
깊은 사본을 만들고 싶습니다. 코드가 컴파일되고 오류없이 실행됩니다.
public class Author {
private String imie, nazwisko;
private int rokUrodzenia;
public Author(String imie, String nazwisko, int rokUrodzenia) {
this.imie = imie;
this.nazwisko = nazwisko;
this.rokUrodzenia = rokUrodzenia;
}
public String getImie() {
return imie;
}
public String getNazwisko() {
return nazwisko;
}
public int getRokUrodzenia() {
return rokUrodzenia;
}
@Override
public String toString() {
return imie + " " + nazwisko + " (ur. " + rokUrodzenia + ")";
}
public void zmienInformacje(String imie, String nazwisko, int rokUrodzenia) {
this.imie = imie;
this.nazwisko = nazwisko;
this.rokUrodzenia = rokUrodzenia;
}
}
import java.util.Arrays;
public class Book {
private String tytul;
private int rokWydania;
private Author[] autorzy;
public Book(String tytul, int rokWydania, Author... autorzy) {
this.tytul = tytul;
this.rokWydania = rokWydania;
this.autorzy = Arrays.copyOf(autorzy, autorzy.length);
}
public String toString() {
String s = " Tytuł: " + tytul +"\nrok wydania: " + rokWydania + "\n";
if(autorzy.length == 1)
s+=" Autor: " + autorzy[0];
else{
s+=" Autorzy: " + autorzy[0];
for(int i = 1; i < autorzy.length; i++)
s+="\n " + autorzy[i];
}
return s + "\n\n";
}
public static void main(String[] args) {
Author a1 = new Author("Isabel", "Allende", 1942);
Author a2 = new Author("Manueala", "Gretkowska", 1964);
Author a3 = new Author("Piotr", "Pietucha", 1954);
Book b1 = new Book("Suma naszych dni", 2010, a1);
Book b2 = new Book("Polka", 2001, a2);
Book b3 = new Book("Sceny z życia pozamałżeńskiego", 2003, a2, a3);
a2.zmienInformacje("Tove", "Jansson", 1956);
Book b4 = new Book("Lato muminków", 2006, a2);
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
}
}
는 원하는 출력 :
Tytuł: Suma naszych dni
rok wydania: 2010
Autor: Isabel Allende (ur. 1942)
Tytuł: Polka
rok wydania: 2001
Autor: Manuela Gretkowska (ur. 1964)
Tytuł: Suma naszych dni
rok wydania: 2010
Autorzy: Manuela Gretkowska (ur. 1964)
Piotr Pietucha (ur. 1954)
Tytuł: Lato muminków
rok wydania: 2006
Autor: Tove Jansson (ur. 1956)
는
Tytuł: Suma naszych dni
rok wydania: 2010
Autor: Isabel Allende (ur. 1942)
Tytuł: Polka
rok wydania: 2001
Autor: Tove Jansson (ur. 1956)//WRONG
Tytuł: Sceny z życia pozamałżeńskiego
rok wydania: 2003
Autorzy: Tove Jansson (ur. 1956)//WRONG
Piotr Pietucha (ur. 1954)
Tytuł: Lato muminków
rok wydania: 2006
Autor: Tove Jansson (ur. 1956)
그렇게 될 것이라고 했습니까? 아마도 그렇지 않습니다. 목표를 반영하도록 제목을 변경하십시오 (예 : * 검색 *). 예 : "배열의 복사본 만들기" – user2246674
@ user2246674 예, 그 외 다른 주제가 있습니다. – Yoda
아니요, [깊은 사본을 만들 것이라고하지는 않습니다] (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf (T % 5B % 5D , % 20int)). 이 과제에 대한 전체 주제가 * 존재하지만 많은 기존의 해답/접근법이 있습니다. (예 : [1] (http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object-in-java), [2] (http : /stackoverflow.com/questions/3947227/deep-copy-of-an-object-array)) – user2246674