diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/Person.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/Person.java new file mode 100644 index 00000000..39f47e51 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/Person.java @@ -0,0 +1,23 @@ +package com.example.refactoring._06_mutable_data._23_change_reference_to_value; + +public class Person { + + private TelephoneNumber officeTelephoneNumber; + + public String officeAreaCode() { + return this.officeTelephoneNumber.areaCode(); + } + + public void officeAreaCode(String areaCode) { + this.officeTelephoneNumber = new TelephoneNumber(areaCode, this.officeNumber()); + } + + public String officeNumber() { + return this.officeTelephoneNumber.number(); + } + + public void officeNumber(String number) { + this.officeTelephoneNumber = new TelephoneNumber(this.officeAreaCode(), number); + } + +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/TelephoneNumber.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/TelephoneNumber.java new file mode 100644 index 00000000..e6ed3f71 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/TelephoneNumber.java @@ -0,0 +1,36 @@ +package com.example.refactoring._06_mutable_data._23_change_reference_to_value; + +import java.util.Objects; + +public class TelephoneNumber { + + private final String areaCode; + + private final String number; + + public TelephoneNumber(String areaCode, String number) { + this.areaCode = areaCode; + this.number = number; + } + + public String areaCode() { + return areaCode; + } + + public String number() { + return number; + } + + @Override + public int hashCode() { + return Objects.hash(areaCode, number); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + TelephoneNumber that = (TelephoneNumber) obj; + return Objects.equals(areaCode, that.areaCode) && Objects.equals(number, that.number); + } +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/before/Person.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/before/Person.java new file mode 100644 index 00000000..3827b658 --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/before/Person.java @@ -0,0 +1,23 @@ +package com.example.refactoring._06_mutable_data._23_change_reference_to_value.before; + +public class Person { + + private TelephoneNumber officeTelephoneNumber; + + public String officeAreaCode() { + return this.officeTelephoneNumber.areaCode(); + } + + public void officeAreaCode(String areaCode) { + this.officeTelephoneNumber.areaCode(areaCode); + } + + public String officeNumber() { + return this.officeTelephoneNumber.number(); + } + + public void officeNumber(String number) { + this.officeTelephoneNumber.number(number); + } + +} diff --git a/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/before/TelephoneNumber.java b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/before/TelephoneNumber.java new file mode 100644 index 00000000..389738ee --- /dev/null +++ b/refactoring/src/main/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/before/TelephoneNumber.java @@ -0,0 +1,24 @@ +package com.example.refactoring._06_mutable_data._23_change_reference_to_value.before; + +public class TelephoneNumber { + + private String areaCode; + + private String number; + + public String areaCode() { + return areaCode; + } + + public void areaCode(String areaCode) { + this.areaCode = areaCode; + } + + public String number() { + return number; + } + + public void number(String number) { + this.number = number; + } +} diff --git a/refactoring/src/test/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/TelephoneNumberTest.java b/refactoring/src/test/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/TelephoneNumberTest.java new file mode 100644 index 00000000..78de2010 --- /dev/null +++ b/refactoring/src/test/java/com/example/refactoring/_06_mutable_data/_23_change_reference_to_value/TelephoneNumberTest.java @@ -0,0 +1,17 @@ +package com.example.refactoring._06_mutable_data._23_change_reference_to_value; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TelephoneNumberTest { + + @Test + void testEquals() { + TelephoneNumber telephoneNumber1 = new TelephoneNumber("123", "1234"); + TelephoneNumber telephoneNumber2 = new TelephoneNumber("123", "1234"); + + assertEquals(telephoneNumber1, telephoneNumber2); + } + +} \ No newline at end of file