Understanding Java generics with the help of scenarios -- part 2
Extends Understanding Java generics with the help of scenarios -- part 1
Scenario 2: A custom generic class GenericMultipleTypesScenario class that handles Integer and Double types.
import java.util.List; public class GenericMultipleTypesScenario<Number> { public void readOnly(List<? extends Number> numbers) { for (Number number : numbers) { System.out.println("readOnly: " + number); } } public void witeOnly(List<? super Number> numbers, Number aNumber) { numbers.add(aNumber); } public void witeAndRead(List<Number> numbers, Number aNumber) { numbers.add(aNumber); for (Number number : numbers) { System.out.println("readAndWrite: " + number); } } }
The test class
import java.util.ArrayList; import java.util.List; public class GenericMultipleTypesScenarioTest { public static void main(String[] args) { //Integer GenericMultipleTypesScenario<Integer> integerType = new GenericMultipleTypesScenario<Integer>(); List<Integer> numbers = new ArrayList<Integer>(); numbers.add(1); //autoboxes 1 to type Integer integerType.readOnly(numbers); integerType.witeOnly(numbers, 6); //autoboxes 6 to type Integer integerType.witeAndRead(numbers, Integer.valueOf(9)); //Double GenericMultipleTypesScenario<Double> doubleType = new GenericMultipleTypesScenario<Double>(); List<Double> numbersDouble = new ArrayList<Double>(); numbersDouble.add(1.5); //autoboxes 1.5 to type Double doubleType.readOnly(numbersDouble); doubleType.witeOnly(numbersDouble, 6.5); //autoboxes 6.5 to type Double doubleType.witeAndRead(numbersDouble, Double.valueOf(9.5)); } }
Output:
readOnly: 1 readAndWrite: 1 readAndWrite: 6 readAndWrite: 9 readOnly: 1.5 readAndWrite: 1.5 readAndWrite: 6.5 readAndWrite: 9.5
Scenario 3: A custom generic class GenericAnyTypesScenario class that handles any type like Integer, Double, String, etc. The any type is defined in this example as letter T. It can be any letter.
import java.util.List; public class GenericAnyTypesScenario<T> { public void readOnly(List<? extends T> values) { for (T value : values) { System.out.println("readOnly: " + value); } } public void witeOnly(List<? super T> values, T aValue) { values.add(aValue); } public void witeAndRead(List<T> values, T aValue) { values.add(aValue); for (T value : values) { System.out.println("readAndWrite: " + value); } } }
Test class
import java.util.ArrayList; import java.util.List; public class GenericAnyTypesScenarioTest { public static void main(String[] args) { //integer type GenericAnyTypesScenario<Integer> integerType = new GenericAnyTypesScenario<Integer>(); List<Integer> valuesIntegers = new ArrayList<Integer>(); valuesIntegers.add(1); //autoboxes 1 to type Integer integerType.readOnly(valuesIntegers); integerType.witeOnly(valuesIntegers, 6); //autoboxes 6 to type Integer integerType.witeAndRead(valuesIntegers, Integer.valueOf(9)); //double type GenericAnyTypesScenario<Double> doubleType = new GenericAnyTypesScenario<Double>(); List<Double> valuesDouble = new ArrayList<Double>(); valuesDouble.add(1.5); //autoboxes 1.5 to type Double doubleType.readOnly(valuesDouble); doubleType.witeOnly(valuesDouble, 6.5); //autoboxes 6.5 to type Double doubleType.witeAndRead(valuesDouble, Double.valueOf(9.5)); //string type GenericAnyTypesScenario<String> stringType = new GenericAnyTypesScenario<String>(); List<String> valuesString = new ArrayList<String>(); valuesString.add("apple"); stringType.readOnly(valuesString); stringType.witeOnly(valuesString, "orange"); stringType.witeAndRead(valuesString, "mango"); } }
Output:
readOnly: 1 readAndWrite: 1 readAndWrite: 6 readAndWrite: 9 readOnly: 1.5 readAndWrite: 1.5 readAndWrite: 6.5 readAndWrite: 9.5 readOnly: apple readAndWrite: apple readAndWrite: orange readAndWrite: mango
Labels: generics
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home