Junior
Mida sa tead pindkopi kopeerimisest?
sobes.tech AI
Vastus AI-lt
Lame koop (shallow copy) loob uue objekti koopi, kuid ei koopi kõiki objekte, millele viitavad algse objekti väljad. Selle asemel kopeeritakse vaid viited.
Omadused:
- Muutuvates objektides tehtud muudatused, millele viidatakse koopiates, on nähtavad nii algses objektis kui ka vastupidi.
- Kiirem kui sügav koop, eriti objektide puhul, millel on palju viiteid.
Teostatakse näiteks clone() meetodiga (kui objekt implementeerib Cloneable) või käsitsi.
clone() näide:
// Loome klassi mutabellväljakuga
class Address {
String city;
public Address(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"city='" + city + '\'' +
'}';
}
}
// Loome klassi, millel on viide Addressile, ja implementeerime Cloneable
class Person implements Cloneable {
String name;
Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
// Teostame pinnapealse koopi Object.clone() abil
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address=" + address +
'}';
}
}
// Kasutuse näide
public class ShallowCopyExample {
public static void main(String[] args) throws CloneNotSupportedException {
Address originalAddress = new Address("New York");
Person originalPerson = new Person("Alice", originalAddress);
// Lame koop
Person copiedPerson = (Person) originalPerson.clone();
System.out.println("Original Person: " + originalPerson);
System.out.println("Kopeeritud Person: " + copiedPerson);
// Muudame algse objekti mutabellvälja...
originalAddress.city = "Los Angeles";
// Muudatused on nähtavad ka koopias, kuna viitavad sama Address objekti
System.out.println("\nPärast algse aadressi muutmist:");
System.out.println("Original Person: " + originalPerson);
System.out.println("Kopeeritud Person: " + copiedPerson);
}
}
Kasutatakse, kui ei ole vaja kogu objekti hierarhia täielikku koopiat või kui sisemised objektid on immutables.