BAEL-376 - java generics code

This commit is contained in:
slavisa-baeldung 2016-11-20 22:35:17 +01:00
parent 1f0065299f
commit 2186f64126
2 changed files with 47 additions and 53 deletions

View File

@ -1,24 +1,23 @@
package com.baeldung.generics;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Generics {
// definition of a generic method
public static <T> List<T> fromArrayToList(T[] a) {
List<T> list = new ArrayList<>();
for (T t : a) {
list.add(t);
}
return list;
}
// definition of a generic method
public static <T> List<T> fromArrayToList(T[] a) {
List<T> list = new ArrayList<>();
Arrays.stream(a).forEach(list::add);
return list;
}
// example of a generic method that has Number as an upper bound for T
public static <T extends Number> List<T> fromArrayToListWithUpperBound(T[] a) {
List<T> list = new ArrayList<>();
for (T t : a) {
list.add(t);
}
return list;
}
// example of a generic method that has Number as an upper bound for T
public static <T extends Number> List<T> fromArrayToListWithUpperBound(T[] a) {
List<T> list = new ArrayList<>();
Arrays.stream(a).forEach(list::add);
return list;
}
}

View File

@ -1,46 +1,41 @@
import java.util.Iterator;
import java.util.List;
package com.baeldung.generics;
import org.junit.Test;
import java.util.List;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.MatcherAssert.assertThat;
public class GenericsTest {
// testing the generic method with Integer
@Test
public void fromArrayToListIntTest() {
Integer[] intArray = { 1, 2, 3, 4, 5 };
List<Integer> list = Generics.fromArrayToList(intArray);
Iterator<Integer> iterator;
iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
// testing the generic method with Integer
@Test
public void givenArrayOfIntegers_thanListOfIntegersReturnedOK() {
Integer[] intArray = {1, 2, 3, 4, 5};
List<Integer> list = Generics.fromArrayToList(intArray);
// testing the generic method with String
@Test
public void fromArrayToListStringTest() {
String[] stringArray = { "hello1", "hello2", "hello3", "hello4", "hello5" };
List<String> list = Generics.fromArrayToList(stringArray);
Iterator<String> iterator;
iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
assertThat(list, hasItems(intArray));
}
// 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() {
Integer[] intArray = { 1, 2, 3, 4, 5 };
List<Integer> list = Generics.fromArrayToListWithUpperBound(intArray);
Iterator<Integer> iterator;
iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
// testing the generic method with String
@Test
public void givenArrayOfStrings_thanListOfStringsReturnedOK() {
String[] stringArray = {"hello1", "hello2", "hello3", "hello4", "hello5"};
List<String> list = Generics.fromArrayToList(stringArray);
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 givenArrayOfIntegersAndNumberUpperBound_thanListOfIntegersReturnedOK() {
Integer[] intArray = {1, 2, 3, 4, 5};
List<Integer> list = Generics.fromArrayToListWithUpperBound(intArray);
assertThat(list, hasItems(intArray));
}
}