diff --git a/java-shallow-deep-copy/pom.xml b/java-shallow-deep-copy/pom.xml new file mode 100644 index 0000000000..68ff8fc8e7 --- /dev/null +++ b/java-shallow-deep-copy/pom.xml @@ -0,0 +1,32 @@ + + 4.0.0 + + org.example + java-shallow-deep-copy + 1.0-SNAPSHOT + jar + + java-shallow-deep-copy + http://maven.apache.org + + + UTF-8 + 18 + 18 + + + + + org.junit.jupiter + junit-jupiter-api + 5.9.1 + test + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + diff --git a/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/App.java b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/App.java new file mode 100644 index 0000000000..0f01a498a6 --- /dev/null +++ b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/App.java @@ -0,0 +1,13 @@ +package com.baeldung.java_shallow_deep_copy; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + + } +} diff --git a/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/Person.java b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/Person.java new file mode 100644 index 0000000000..e52a669e28 --- /dev/null +++ b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/Person.java @@ -0,0 +1,34 @@ +package com.baeldung.java_shallow_deep_copy.data; + +import java.util.List; + +public class Person { + + private String name; + private String surname; + private List addresses; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSurname() { + return surname; + } + + public void setSurname(String surname) { + this.surname = surname; + } + + public List getAddresses() { + return addresses; + } + + public void setAddresses(List addresses) { + this.addresses = addresses; + } +} diff --git a/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/PersonDeep.java b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/PersonDeep.java new file mode 100644 index 0000000000..a2823566b8 --- /dev/null +++ b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/PersonDeep.java @@ -0,0 +1,15 @@ +package com.baeldung.java_shallow_deep_copy.data; + +import java.util.ArrayList; +import java.util.List; + +public class PersonDeep extends Person{ + + public PersonDeep(String name, String surname, List addresses) { + this.setName(name); + this.setSurname(surname); + List deepCopyList = new ArrayList<>(); + deepCopyList.addAll(addresses); + this.setAddresses(deepCopyList); + } +} diff --git a/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/PersonShallow.java b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/PersonShallow.java new file mode 100644 index 0000000000..2221d8b924 --- /dev/null +++ b/java-shallow-deep-copy/src/main/java/com/baeldung/java_shallow_deep_copy/data/PersonShallow.java @@ -0,0 +1,14 @@ +package com.baeldung.java_shallow_deep_copy.data; + +import java.util.List; + +public class PersonShallow extends Person { + + public PersonShallow(String name, String surname, List addresses) { + this.setName(name); + this.setSurname(surname); + this.setAddresses(addresses); + } + + +} diff --git a/java-shallow-deep-copy/src/test/java/com/baeldung/java_shallow_deep_copy/unit/DeepCopyTest.java b/java-shallow-deep-copy/src/test/java/com/baeldung/java_shallow_deep_copy/unit/DeepCopyTest.java new file mode 100644 index 0000000000..5fbdbabad5 --- /dev/null +++ b/java-shallow-deep-copy/src/test/java/com/baeldung/java_shallow_deep_copy/unit/DeepCopyTest.java @@ -0,0 +1,26 @@ +package com.baeldung.java_shallow_deep_copy.unit; + +import com.baeldung.java_shallow_deep_copy.data.PersonDeep; +import com.baeldung.java_shallow_deep_copy.data.PersonShallow; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +public class DeepCopyTest { + + @Test + void whenTheParameterIsNotAnImmutableObject_thenShouldDoADeepCopy (){ + String name = "Hello"; + String surname = "World"; + List addresses = new ArrayList<>(); + addresses.add("Standford street"); + PersonDeep personShallow = new PersonDeep(name,surname,addresses); + personShallow.getAddresses().forEach(System.out :: println); + Assertions.assertEquals(addresses, personShallow.getAddresses()); + addresses.add("Oxford street"); + personShallow.getAddresses().forEach(System.out :: println); + Assertions.assertNotEquals(addresses, personShallow.getAddresses()); + } +} diff --git a/java-shallow-deep-copy/src/test/java/com/baeldung/java_shallow_deep_copy/unit/ShallowCopyTest.java b/java-shallow-deep-copy/src/test/java/com/baeldung/java_shallow_deep_copy/unit/ShallowCopyTest.java new file mode 100644 index 0000000000..daef700145 --- /dev/null +++ b/java-shallow-deep-copy/src/test/java/com/baeldung/java_shallow_deep_copy/unit/ShallowCopyTest.java @@ -0,0 +1,38 @@ +package com.baeldung.java_shallow_deep_copy.unit; + +import com.baeldung.java_shallow_deep_copy.data.PersonShallow; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + + +public class ShallowCopyTest { + + @Test + void whenTheParameterIsAnImmutableObject_thenShouldNotChangeTheValue (){ + String name = "Hello"; + String surname = "World"; + PersonShallow personShallow = new PersonShallow(name,surname,null); + surname = "Pluto"; + Assertions.assertNotEquals(surname, personShallow.getSurname()); + } + + @Test + void whenTheParameterIsNotAnImmutableObject_thenShouldDoAShallowCopy (){ + String name = "Hello"; + String surname = "World"; + List addresses = new ArrayList<>(); + addresses.add("Standford street"); + PersonShallow personShallow = new PersonShallow(name,surname,addresses); + personShallow.getAddresses().forEach(System.out :: println); + Assertions.assertEquals(addresses, personShallow.getAddresses()); + addresses.add("Oxford street"); + personShallow.getAddresses().forEach(System.out :: println); + Assertions.assertEquals(addresses, personShallow.getAddresses()); + } + + + +}