Junior
რას იცი ზედაპირული კოპირების შესახებ?
sobes.tech AI
პასუხი AI-სგან
Շոլոու պատճենը (shallow copy) ստեղծում է օբյեկտի նոր պատճեն, բայց չի պատճենում այն օբյեկտները, որոնց վրա հղում են կատարվում սկզբնական օբյեկտի դաշտերը: Փոխարենը, պատճենվում են միայն հղումները:
Հատկություններ՝
- Փոփոխությունները մուտաբել օբյեկտներում, որոնց վրա հղում են կատարվում պատճենները, կտեսնվեն սկզբնական օբյեկտում և հակառակը:
- Ավելի արագ, քան խոր պատճենումը՝ հատկապես շատ հղումներով օբյեկտների դեպքում:
Կատարվում է, օրինակ, clone() մեթոդով (եթե օբյեկտը իրականացնում է Cloneable) կամ ձեռքով:
Օրինակ clone():
// Ստեղծում ենք մուտաբել դաշտով դաս
class Address {
String city;
public Address(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"city='" + city + '\'' +
'}';
}
}
// Ստեղծում ենք Address-ի հղումով դաս, իրականացնում ենք Cloneable
class Person implements Cloneable {
String name;
Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
// Իրականացնում ենք մակերեսային պատճենում Object.clone()-ով
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address=" + address +
'}';
}
}
// Օրինակ օգտագործման
public class ShallowCopyExample {
public static void main(String[] args) throws CloneNotSupportedException {
Address originalAddress = new Address("New York");
Person originalPerson = new Person("Alice", originalAddress);
// Հարթ պատճենում
Person copiedPerson = (Person) originalPerson.clone();
System.out.println("Original Person: " + originalPerson);
System.out.println("Copied Person: " + copiedPerson);
// Փոխում ենք մուտաբել դաշտը սկզբնական օբյեկտում...
originalAddress.city = "Los Angeles";
// Փոփոխությունները տեսանելի են նաև պատճենում, քանի որ հղում են դեպի նույն Address օբյեկտը
System.out.println("\nAfter modifying original address:");
System.out.println("Original Person: " + originalPerson);
System.out.println("Copied Person: " + copiedPerson);
}
}
Կիրառվում է, երբ անհրաժեշտ չէ ամբողջ օբյեկտների հիերարխիայի լիարժեք կրկնօրինակում կամ երբ ներսի օբյեկտները անփոփոխ են։