From af38c30c0007583aa39420d69ba04e340c8d31de Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sat, 3 Aug 2019 22:48:29 +0200 Subject: [PATCH 1/9] init --- .../core-java-lang-oop-2/pom.xml | 13 ++++++ .../com/baeldung/accessmodifiers/Student.java | 41 +++++++++++++++++++ .../PublicAccessModifierTest.java | 36 ++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/Student.java create mode 100644 core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierTest.java diff --git a/core-java-modules/core-java-lang-oop-2/pom.xml b/core-java-modules/core-java-lang-oop-2/pom.xml index 669a37b0f5..b7bd72372b 100644 --- a/core-java-modules/core-java-lang-oop-2/pom.xml +++ b/core-java-modules/core-java-lang-oop-2/pom.xml @@ -14,6 +14,19 @@ ../../parent-java + + + com.h2database + h2 + ${h2.version} + test + + + + + 1.4.199 + + core-java-lang-oop-2 diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/Student.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/Student.java new file mode 100644 index 0000000000..8fc6da80fa --- /dev/null +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/Student.java @@ -0,0 +1,41 @@ +package com.baeldung.accessmodifiers; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class Student { + + private BigDecimal grades; //new representation + private String name; + private int age; + + public int getGrades() { + return grades.intValue(); //Backward compatibility + } + + public Connection getConnection() throws SQLException { + + final String URL = "jdbc:h2:~/test"; + return DriverManager.getConnection(URL, "sa", ""); + + } + + public BigDecimal bigDecimalGrades() { + return grades; + } + + public void setAge(int age) { + if (age < 0 || age > 150) + throw new IllegalArgumentException(); + + this.age = age; + } + + @Override + public String toString() { + return this.name; + } + +} diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierTest.java new file mode 100644 index 0000000000..79b31cdae5 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierTest.java @@ -0,0 +1,36 @@ +package com.baeldung.accessmodifiers; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +@TestInstance(Lifecycle.PER_CLASS) +public class PublicAccessModifierTest { + + @Test + public void whenUsingIntValue_valuesAreEqual() { + + assertEquals(0, new BigDecimal(0).intValue()); + } + + @Test + public void whenUsingToLowerCase_valuesAreEqual() { + + assertEquals("alex", "ALEX".toLowerCase()); + } + + @Test + public void whenConnectingToH2_connectionInstanceIsReturned() throws SQLException { + + final String URL = "jdbc:h2:~/test"; + Connection conn = DriverManager.getConnection(URL, "sa", ""); + assertNotNull(conn); + } + +} From d5fd9a0d9a06b914d91cae0728b7f01e0c2a11bc Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sat, 3 Aug 2019 23:14:17 +0200 Subject: [PATCH 2/9] correcting unit test class name --- ...ccessModifierTest.java => PublicAccessModifierUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/{PublicAccessModifierTest.java => PublicAccessModifierUnitTest.java} (95%) diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java similarity index 95% rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierTest.java rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java index 79b31cdae5..02cd816515 100644 --- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierTest.java +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java @@ -11,7 +11,7 @@ import java.sql.DriverManager; import java.sql.SQLException; @TestInstance(Lifecycle.PER_CLASS) -public class PublicAccessModifierTest { +public class PublicAccessModifierUnitTest { @Test public void whenUsingIntValue_valuesAreEqual() { From 5a1a468c781b24047d0e9b6b208af35bb43323c0 Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Tue, 6 Aug 2019 18:34:33 +0200 Subject: [PATCH 3/9] review modifications --- .../publicmodifier/ListOfThree.java | 31 ++++++++++ .../{ => publicmodifier}/Student.java | 16 ++--- .../PublicAccessModifierUnitTest.java | 58 ++++++++++++++++--- 3 files changed, 89 insertions(+), 16 deletions(-) create mode 100644 core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java rename core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/{ => publicmodifier}/Student.java (71%) diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java new file mode 100644 index 0000000000..54e2c35d22 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java @@ -0,0 +1,31 @@ +package com.baeldung.accessmodifiers.publicmodifier; + +import java.util.AbstractList; + +public class ListOfThree extends AbstractList { + + private static final int MAX_LENGTH = 3; + private int size; + private Object[] elements = new Object[MAX_LENGTH]; + + @Override + @SuppressWarnings("unchecked") + public E get(int index) { + return (E)elements[index]; + } + + @Override + public boolean add(E e) { + + elements[size] = e; + size++; + + return true; + } + + @Override + public int size() { + return size; + } + +} diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/Student.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java similarity index 71% rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/Student.java rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java index 8fc6da80fa..50784c6e54 100644 --- a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/Student.java +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java @@ -1,4 +1,4 @@ -package com.baeldung.accessmodifiers; +package com.baeldung.accessmodifiers.publicmodifier; import java.math.BigDecimal; import java.sql.Connection; @@ -7,12 +7,16 @@ import java.sql.SQLException; public class Student { - private BigDecimal grades; //new representation + private BigDecimal grade; //new representation private String name; private int age; - public int getGrades() { - return grades.intValue(); //Backward compatibility + public int getGrade() { + return grade.intValue(); //Backward compatibility + } + + public BigDecimal bigDecimalGrade() { + return grade; } public Connection getConnection() throws SQLException { @@ -21,10 +25,6 @@ public class Student { return DriverManager.getConnection(URL, "sa", ""); } - - public BigDecimal bigDecimalGrades() { - return grades; - } public void setAge(int age) { if (age < 0 || age > 150) diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java index 02cd816515..06f20c8610 100644 --- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java @@ -3,34 +3,76 @@ package com.baeldung.accessmodifiers; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; +import com.baeldung.accessmodifiers.publicmodifier.ListOfThree; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.util.List; @TestInstance(Lifecycle.PER_CLASS) public class PublicAccessModifierUnitTest { @Test - public void whenUsingIntValue_valuesAreEqual() { - - assertEquals(0, new BigDecimal(0).intValue()); + public void whenUsingBigDecimalIntValueMethod_correspondingIntIsReturned() { + assertEquals(0, new BigDecimal(0).intValue()); //instance member } - + @Test - public void whenUsingToLowerCase_valuesAreEqual() { - + public void whenUsingIntegerMaxValueField_maxPossibleIntValueIsReturned() { + assertEquals(2147483647, Integer.MAX_VALUE); //static field + } + + @Test + public void whenUsingStringToLowerCase_stringTurnsToLowerCase() { assertEquals("alex", "ALEX".toLowerCase()); } + @Test + public void whenParsingStringOne_parseIntReturns1() { + assertEquals(1, Integer.parseInt("1")); + } + @Test public void whenConnectingToH2_connectionInstanceIsReturned() throws SQLException { - final String URL = "jdbc:h2:~/test"; - Connection conn = DriverManager.getConnection(URL, "sa", ""); + final String url = "jdbc:h2:~/test"; + Connection conn = DriverManager.getConnection(url, "sa", ""); assertNotNull(conn); } + @Test + public void whenCreatingCustomList_concreteAndInheritedMethodsWork() { + + List list1 = new ListOfThree(); + list1.add("zero"); //inherited implementation + list1.add("one"); + list1.add("two"); + + //our implemented methods + assertEquals("zero", list1.get(0)); + + assertThrows(ArrayIndexOutOfBoundsException.class, () -> { + list1.get(4); + }); + + assertThrows(ArrayIndexOutOfBoundsException.class, () -> { + list1.add("three"); + }); + + assertEquals(3, list1.size()); + + list1.indexOf("one"); //inherited implementation + + List list2 = new ListOfThree(); + list2.add("zero"); + list2.add("one"); + + assertTrue(list1.containsAll(list2)); //inherited implementation + } + } From b43787bca518230b7f2f852d8b02e060c96fbda4 Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Tue, 6 Aug 2019 20:49:10 +0200 Subject: [PATCH 4/9] modifying ListOfThree class --- .../publicmodifier/ListOfThree.java | 28 +++++++++---------- .../PublicAccessModifierUnitTest.java | 28 ++++++------------- 2 files changed, 23 insertions(+), 33 deletions(-) diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java index 54e2c35d22..2ded0ba5d3 100644 --- a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java @@ -1,31 +1,31 @@ package com.baeldung.accessmodifiers.publicmodifier; import java.util.AbstractList; +import java.util.Arrays; public class ListOfThree extends AbstractList { - private static final int MAX_LENGTH = 3; - private int size; - private Object[] elements = new Object[MAX_LENGTH]; + private static final int LENGTH = 3; + private Object[] elements; + + public ListOfThree(E[] data) { + if(data == null + || data.length != LENGTH) + throw new IllegalArgumentException(); + + this.elements = Arrays.copyOf(data, data.length); //shallow copy + + } @Override @SuppressWarnings("unchecked") - public E get(int index) { + public E get(int index) { return (E)elements[index]; } - - @Override - public boolean add(E e) { - - elements[size] = e; - size++; - - return true; - } @Override public int size() { - return size; + return LENGTH; } } diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java index 06f20c8610..fa42044aca 100644 --- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java @@ -48,31 +48,21 @@ public class PublicAccessModifierUnitTest { @Test public void whenCreatingCustomList_concreteAndInheritedMethodsWork() { - List list1 = new ListOfThree(); - list1.add("zero"); //inherited implementation - list1.add("one"); - list1.add("two"); + String[] dataSet1 = new String[] {"zero", "one", "two"}; + + List list1 = new ListOfThree(dataSet1); //our implemented methods - assertEquals("zero", list1.get(0)); - - assertThrows(ArrayIndexOutOfBoundsException.class, () -> { - list1.get(4); - }); - - assertThrows(ArrayIndexOutOfBoundsException.class, () -> { - list1.add("three"); - }); - + assertEquals("one", list1.get(1)); assertEquals(3, list1.size()); - list1.indexOf("one"); //inherited implementation + //inherited implementations + assertEquals(1, list1.indexOf("one")); - List list2 = new ListOfThree(); - list2.add("zero"); - list2.add("one"); + String[] dataSet2 = new String[] {"two", "zero", "one"}; + List list2 = new ListOfThree(dataSet2); - assertTrue(list1.containsAll(list2)); //inherited implementation + assertTrue(list1.containsAll(list2)); } } From 12bc0fcfd9fff10bc6c8b2e8b2d1f2e1141ad72d Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sun, 18 Aug 2019 13:54:19 +0200 Subject: [PATCH 5/9] changing public static final field example --- .../baeldung/accessmodifiers/publicmodifier/Student.java | 5 +++++ .../accessmodifiers/PublicAccessModifierUnitTest.java | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java index 50784c6e54..65237fa864 100644 --- a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java @@ -10,6 +10,7 @@ public class Student { private BigDecimal grade; //new representation private String name; private int age; + public static final String GENDER = "male"; public int getGrade() { return grade.intValue(); //Backward compatibility @@ -33,6 +34,10 @@ public class Student { this.age = age; } + public int getAge() { + return age; + } + @Override public String toString() { return this.name; diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java index fa42044aca..8b11e3a9ad 100644 --- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java @@ -4,10 +4,10 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; import com.baeldung.accessmodifiers.publicmodifier.ListOfThree; +import com.baeldung.accessmodifiers.publicmodifier.Student; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; @@ -22,6 +22,11 @@ public class PublicAccessModifierUnitTest { assertEquals(0, new BigDecimal(0).intValue()); //instance member } + @Test + public void whenUsingGenderPublicStaticFinalField_getReferenceToStringMale() { + assertEquals("male", Student.GENDER); + } + @Test public void whenUsingIntegerMaxValueField_maxPossibleIntValueIsReturned() { assertEquals(2147483647, Integer.MAX_VALUE); //static field From c1d88b7364162c1a8575b8c1315ee5245ac55a01 Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sun, 18 Aug 2019 16:40:13 +0200 Subject: [PATCH 6/9] renaming bigDecimalGrade method + removing the GENDER constant --- .../accessmodifiers/publicmodifier/SpecialCharacters.java | 7 +++++++ .../baeldung/accessmodifiers/publicmodifier/Student.java | 8 ++++---- .../accessmodifiers/PublicAccessModifierUnitTest.java | 8 +------- 3 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java new file mode 100644 index 0000000000..5556e9aa57 --- /dev/null +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java @@ -0,0 +1,7 @@ +package com.baeldung.accessmodifiers.publicmodifier; + +public class SpecialCharacters { + + public static final String SLASH = "/"; + +} diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java index 65237fa864..c4abdfe68d 100644 --- a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java @@ -10,13 +10,12 @@ public class Student { private BigDecimal grade; //new representation private String name; private int age; - public static final String GENDER = "male"; public int getGrade() { return grade.intValue(); //Backward compatibility } - public BigDecimal bigDecimalGrade() { + public BigDecimal getBigDecimalGrade() { return grade; } @@ -28,9 +27,10 @@ public class Student { } public void setAge(int age) { - if (age < 0 || age > 150) + if (age < 0 || age > 150) { throw new IllegalArgumentException(); - + } + this.age = age; } diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java index 8b11e3a9ad..0eca4b4222 100644 --- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java @@ -4,7 +4,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; import com.baeldung.accessmodifiers.publicmodifier.ListOfThree; -import com.baeldung.accessmodifiers.publicmodifier.Student; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -22,16 +21,11 @@ public class PublicAccessModifierUnitTest { assertEquals(0, new BigDecimal(0).intValue()); //instance member } - @Test - public void whenUsingGenderPublicStaticFinalField_getReferenceToStringMale() { - assertEquals("male", Student.GENDER); - } - @Test public void whenUsingIntegerMaxValueField_maxPossibleIntValueIsReturned() { assertEquals(2147483647, Integer.MAX_VALUE); //static field } - + @Test public void whenUsingStringToLowerCase_stringTurnsToLowerCase() { assertEquals("alex", "ALEX".toLowerCase()); From 1756cfe00889f525d00c57762fe26cae5cd563d4 Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Wed, 21 Aug 2019 16:49:09 +0200 Subject: [PATCH 7/9] nested datatypes example --- .../PublicAccessModifierUnitTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java index 0eca4b4222..c9664283a7 100644 --- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java @@ -11,7 +11,9 @@ import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.util.HashMap; import java.util.List; +import java.util.Map; @TestInstance(Lifecycle.PER_CLASS) public class PublicAccessModifierUnitTest { @@ -25,7 +27,20 @@ public class PublicAccessModifierUnitTest { public void whenUsingIntegerMaxValueField_maxPossibleIntValueIsReturned() { assertEquals(2147483647, Integer.MAX_VALUE); //static field } + + @Test + public void whenUsingEntrySet_keyValuePairsAreReturned() { + Map mapObject = new HashMap(); + mapObject.put("name", "Alex"); + + for(Map.Entry entry : mapObject.entrySet()) { + assertEquals("name", entry.getKey()); + assertEquals("Alex", entry.getValue()); + } + + } + @Test public void whenUsingStringToLowerCase_stringTurnsToLowerCase() { assertEquals("alex", "ALEX".toLowerCase()); From 02f3d586608c6fb177dd906535d418a7eee6da35 Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sat, 24 Aug 2019 13:46:39 +0200 Subject: [PATCH 8/9] refactoring Student class grade field --- .../publicmodifier/Student.java | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java index c4abdfe68d..83a0dcb30f 100644 --- a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java +++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java @@ -4,19 +4,21 @@ import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.util.Date; public class Student { - private BigDecimal grade; //new representation + private StudentGrade grade; //new data representation +// private int grade; //old data representation private String name; private int age; + + public void setGrade(int grade) { + this.grade = new StudentGrade(grade); + } public int getGrade() { - return grade.intValue(); //Backward compatibility - } - - public BigDecimal getBigDecimalGrade() { - return grade; + return this.grade.getGrade().intValue(); //int is returned for backward compatibility } public Connection getConnection() throws SQLException { @@ -43,4 +45,23 @@ public class Student { return this.name; } + private class StudentGrade { + private BigDecimal grade = BigDecimal.ZERO; + private Date updatedAt; + + public StudentGrade(int grade) { + this.grade = new BigDecimal(grade); + this.updatedAt = new Date(); + } + + public BigDecimal getGrade() { + return grade; + } + + public Date getDate() { + return updatedAt; + } + + } + } From 4dd44a29d8ac6bd01428587d35c753b617e8edcb Mon Sep 17 00:00:00 2001 From: "m.raheem" Date: Sat, 24 Aug 2019 13:50:24 +0200 Subject: [PATCH 9/9] Adding unit test for Student grade --- .../accessmodifiers/PublicAccessModifierUnitTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java index c9664283a7..a2d891ac93 100644 --- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java +++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java @@ -4,6 +4,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; import com.baeldung.accessmodifiers.publicmodifier.ListOfThree; +import com.baeldung.accessmodifiers.publicmodifier.Student; + import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -28,6 +30,15 @@ public class PublicAccessModifierUnitTest { assertEquals(2147483647, Integer.MAX_VALUE); //static field } + @Test + public void whenChangingStudentInternalRepresentation_clientCodeWillNotBreak() { + + Student student = new Student(); + student.setGrade(100); + + assertEquals(100, student.getGrade()); + } + @Test public void whenUsingEntrySet_keyValuePairsAreReturned() {