Lower bounded wildcard:
Java generics lower bounded wildcard : Lower bounded wildcard is used to restrict the unknown type to be a specific type or a super type of that type using ‘?’ with super keyword.
Syntax: Collectiontype <? super T>
Let us consider that we want to write a method which prints list items and work on List<Integer>, List<Number> and List<Object> or any type which can contain Integer type value. Normally we write it as:
public static void printListItems(List<Integer> list) { for (Integer num : list){ System.out.println(num); } } |
But this method will not work for List<Number> and List<Object>. We can use lower bounded wild card to resolve this problem. List<? super Integer> matches a list of Integer and any of its supertypes.
public static void printListItems(List<? super Integer> list) { for (Object num : list){ System.out.println(num); } } |
Lower bounded wildcard example:
GenericsTest.java
import java.util.ArrayList; import java.util.List; /** * This class is used to show the use of Lower bounded wildcard. * @author w3schools */ public class GenericsTest { //Only work for the list of Number type. static void printListItems1(List<Integer> list){ for (Integer num : list){ System.out.println(num); } } //Work for Number and any of its sub types. static void printListItems2(List<? super Integer> list){ for (Object num : list){ System.out.println(num); } } public static void main(String args[]){ //Arraylist of Integer type. List<Integer> list1 = new ArrayList<Integer>(); list1.add(1); list1.add(2); list1.add(3); //Arraylist of Number type. List<Number> list2 = new ArrayList<Number>(); list2.add(1.4); list2.add(2.3); list2.add(3.4); //Only accept Integer type list. System.out.println("Print of List of Integer type" + " using squareOfListItems1 method:"); printListItems1(list1); //Accept Integer and any of its super types. System.out.println("Print of List of Integer type" + " using squareOfListItems2 method:");; printListItems2(list1); System.out.println("Print of List of Number type using" + " squareOfListItems2 method:"); printListItems2(list2); } } |
Output:
Print of List of Integer type using squareOfListItems1 method: 1 2 3 Print of List of Integer type using squareOfListItems2 method: 1 2 3 Print of List of Number type using squareOfListItems2 method: 1.4 2.3 3.4 |
Download this example.
Next Topic: Generics class example.
Previous Topic: Upper bounded wildcard.