diff --git a/core-java/src/main/java/com/baeldung/generics/Building.java b/core-java/src/main/java/com/baeldung/generics/Building.java new file mode 100644 index 0000000000..cfdcc63170 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/generics/Building.java @@ -0,0 +1,5 @@ + +public class Building { + public void paint() { + } +} diff --git a/core-java/src/main/java/com/baeldung/generics/Generics.java b/core-java/src/main/java/com/baeldung/generics/Generics.java index ce1325687f..31a6ee6b60 100644 --- a/core-java/src/main/java/com/baeldung/generics/Generics.java +++ b/core-java/src/main/java/com/baeldung/generics/Generics.java @@ -1,4 +1,5 @@ import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class Generics { @@ -6,19 +7,24 @@ public class Generics { // definition of a generic method public static List fromArrayToList(T[] a) { List list = new ArrayList<>(); - for (T t : a) { - list.add(t); - } + Arrays.stream(a).forEach(list::add); return list; } // example of a generic method that has Number as an upper bound for T public static List fromArrayToListWithUpperBound(T[] a) { List list = new ArrayList<>(); - for (T t : a) { - list.add(t); - } + Arrays.stream(a).forEach(list::add); return list; } -} + // example of a generic method with a wild card, this method can be used + // with a list of any subtype of Building + public static boolean paintAllBuildings(List buildings) { + for (Building building : buildings) { + building.paint(); + } + return true; + } + +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/generics/SubBuilding.java b/core-java/src/main/java/com/baeldung/generics/SubBuilding.java new file mode 100644 index 0000000000..938eb6caf5 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/generics/SubBuilding.java @@ -0,0 +1,4 @@ + +public class SubBuilding extends Building { + +} diff --git a/core-java/src/test/java/com/baeldung/generics/GenericsTest.java b/core-java/src/test/java/com/baeldung/generics/GenericsTest.java index 7778f8ea81..c04a9f21cb 100644 --- a/core-java/src/test/java/com/baeldung/generics/GenericsTest.java +++ b/core-java/src/test/java/com/baeldung/generics/GenericsTest.java @@ -1,4 +1,8 @@ -import java.util.Iterator; +import static org.hamcrest.CoreMatchers.hasItems; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; import java.util.List; import org.junit.Test; @@ -7,40 +11,45 @@ public class GenericsTest { // testing the generic method with Integer @Test - public void fromArrayToListIntTest() { + public void givenArrayOfIntegers_thanListOfIntegersReturnedOK() { Integer[] intArray = { 1, 2, 3, 4, 5 }; List list = Generics.fromArrayToList(intArray); - Iterator iterator; - iterator = list.iterator(); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } + + assertThat(list, hasItems(intArray)); } // testing the generic method with String @Test - public void fromArrayToListStringTest() { + public void givenArrayOfStrings_thanListOfStringsReturnedOK() { String[] stringArray = { "hello1", "hello2", "hello3", "hello4", "hello5" }; List list = Generics.fromArrayToList(stringArray); - Iterator iterator; - iterator = list.iterator(); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } + + assertThat(list, hasItems(stringArray)); } // testing the generic method with Number as upper bound with Integer // if we test fromArrayToListWithUpperBound with any type that doesn't // extend Number it will fail to compile @Test - public void fromArrayToListUpperboundIntTest() { + public void givenArrayOfIntegersAndNumberUpperBound_thanListOfIntegersReturnedOK() { Integer[] intArray = { 1, 2, 3, 4, 5 }; List list = Generics.fromArrayToListWithUpperBound(intArray); - Iterator iterator; - iterator = list.iterator(); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } + + assertThat(list, hasItems(intArray)); } -} + // testing paintAllBuildings method with a subtype of Building, the method + // will work with all subtypes of Building + @Test + public void givenSubTypeOfAwildCardBoundedGenericMethod() { + + List subBuildingsList = new ArrayList<>(); + subBuildingsList.add(new SubBuilding()); + subBuildingsList.add(new SubBuilding()); + + boolean result = Generics.paintAllBuildings(subBuildingsList); + assertTrue(result); + + } + +} \ No newline at end of file